Фильтр Собеля неверный результат - PullRequest
0 голосов
/ 18 октября 2019

Я пишу фильтр Собела с python, но результат кажется отличным от другого. Есть ли какая-то ошибка в моем коде? Или я неправильно понимаю соболь фильтр

и мой результат

enter image description here

import cv2
import numpy as np

img = cv2.imread('Lenna.png',0)
cv2.imshow('image',img)


def convolution(img,rowMask,columnsMask,maskSize,r):


    outPut = np.zeros((len(img),len(img[0])))
    img = np.pad(img,r,"constant")

    for y in range(0,len(outPut)):
        for x in range(0,len(outPut[0])):
            outPut[y][x] = convolutionRow(img,y+r, x+r, maskSize,rowMask,r)

    for y in range(0,len(outPut)):
        for x in range(0,len(outPut[0])):
            outPut[y][x] = convolutionColumns(img,y+r, x+r, maskSize,columnsMask,r)

    return outPut


def convolutionRow(img,y,x,maskSize,rowMask,r):
    sum = 0
    for i in range(0,maskSize):
        sum += img[y][x-r+i]*rowMask[i]
    return sum

def convolutionColumns(img,y,x,maskSize,columnsMask,r):
    sum = 0
    for i in range(0,maskSize):
        sum += img[y-r+i][x]*columnsMask[i]
    return sum

SobelXRowMask=np.array([0.125,0.25,0.125])
SobelXColumnsMask=np.array([-0.125,0,0.125])

SobelX = convolution(img, SobelXRowMask, SobelXColumnsMask,3,1)
cv2.imshow('SobelXOutPut',SobelX)


SobelYRowMask=np.array([-0.125,0,0.125])
SobelYColumnsMask=np.array([0.125,0.25,0.125])

SobelY = convolution(img, SobelYRowMask, SobelYColumnsMask,3,1)
cv2.imshow('SobelYOutPut',SobelY)

cv2.waitKey(0)
cv2.destroyAllWindows()
...