首页 > 解决方案 > Sobel过滤错误结果

问题描述

我正在用 python 编写一个 Sobel 过滤器,但结果似乎与其他过滤器不同,我的代码有什么错误吗?还是我误解了sobol过滤器

这是我的结果

在此处输入图像描述

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()

标签: pythonimage-processingfilterconvolutionsobel

解决方案


推荐阅读