Python Sobel滤波器错误结果
我正在用python编写Sobel过滤器, 但结果似乎和另一个不同, 我的代码有错误吗? 还是我误解了sobol过滤器 这就是我的结果Python Sobel滤波器错误结果,python,image-processing,filter,convolution,sobel,Python,Image Processing,Filter,Convolution,Sobel,我正在用python编写Sobel过滤器, 但结果似乎和另一个不同, 我的代码有错误吗? 还是我误解了sobol过滤器 这就是我的结果 请编辑以修复您的输入错误。我没有时间完全检查您的代码,但我在一秒钟内看到您将行掩码与img和colMask与img进行了卷积。实际上,您要做的是将img的结果和一个掩码与第二个掩码进行卷积。否则,就用第二个卷积覆盖第一个卷积的结果。所以你实际上不是在计算一个分离的Sobel过滤器atm。出于某种原因,你的代码在我的电脑上需要20秒。我假设几毫秒。但也许我的电脑
请编辑以修复您的输入错误。我没有时间完全检查您的代码,但我在一秒钟内看到您将
行掩码
与img
和colMask
与img
进行了卷积。实际上,您要做的是将img
的结果和一个掩码与第二个掩码进行卷积。否则,就用第二个卷积覆盖第一个卷积的结果。所以你实际上不是在计算一个分离的Sobel过滤器atm。出于某种原因,你的代码在我的电脑上需要20秒。我假设几毫秒。但也许我的电脑有问题。
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()