使用 Python 在图像上应用过滤器

yas*_*eco 6 numpy image-processing matplotlib python-3.x data-science

这是我的代码:

from matplotlib.pyplot import imread
import matplotlib.pyplot as plt
from scipy.ndimage.filters import convolve


k3 = np.array([ [-1, -1, -1], [-1, 8, -1], [-1, -1, -1] ])
img = imread("lena.jpg")
channels = []
for channel in range(3):
    res = convolve(img[:,:,channel], k3)
    channels.append(res)

img = np.dstack((channels[0], channels[1], channels[2]))
plt.imshow(img)
plt.show()
Run Code Online (Sandbox Code Playgroud)

k3过滤器假设是一个边缘检测过滤器。相反,我得到了一个看起来像白噪声的奇怪图像。

为什么?

这是输出:

在此处输入图片说明

Cri*_*ngo 3

img可能是一个 8 位无符号整数。像您一样与拉普拉斯掩模进行卷积,输出值可能会超出 [0,255] 的有效范围。例如,当为这样的图像分配 -1 时,写入的值将为 254。这会导致输出如问题所示。

对于这个特定的过滤器,首先将图像转换为有符号类型非常重要,例如 16 位有符号整数或浮点类型。

img = img.astype(np.int16)
Run Code Online (Sandbox Code Playgroud)

PS:请注意,拉普拉斯不是边缘检测器