Применение фильтра к изображению с помощью Python - PullRequest
0 голосов
/ 21 декабря 2018

Вот мой код:

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

k3 Фильтр должен быть фильтром обнаружения края.Вместо этого я получаю странное изображение, похожее на белый шум.

Почему?

Вот вывод:

enter image description here

1 Ответ

0 голосов
/ 22 декабря 2018

img, вероятно, 8-разрядное целое число без знака.В отличие от маски Лапласа, выходные значения, вероятно, превысят допустимый диапазон [0,255].При назначении, например, -1 для такого изображения, записанное значение будет 254. Это приводит к выводу, как показано в вопросе.

С этим конкретным фильтром важно преобразовать изображениесначала к знаковому типу, например, 16-разрядное целое число со знаком или тип с плавающей точкой.

img = img.astype(np.int16)

PS: обратите внимание, что Лаплас не является детектором кромок !

...