Я пишу фильтр Собела с python, но результат кажется отличным от другого. Есть ли какая-то ошибка в моем коде? Или я неправильно понимаю соболь фильтр
и мой результат
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()