Я пытаюсь применить оператор Собеля из SciPy.ndimage и повторить результат, показанный в Википедии , но изображения очень разные.
В результате, представленном в Википедии, края гораздо более выражены.
Код, который я использую, приведен ниже.Можно ли изменить этот код, чтобы он соответствовал результатам, представленным в Википедии?Исходное изображение, а также итоговое изображение из Википедии прилагается ниже.
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from scipy.ndimage import filters
# Images from https://en.wikipedia.org/wiki/Sobel_operator
im_original = np.array(Image.open('Valve_original_(1).PNG').convert('L'))
im_sobel = np.array(Image.open('Valve_sobel_(3).PNG').convert('L'))
# Construct two ndarrays of same size as the input image
imx = np.zeros(im_original.shape)
imy = np.zeros(im_original.shape)
# Run the Sobel operator
# See https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.sobel.html
filters.sobel(im_original,1,imx,cval=0.0) # axis 1 is x
filters.sobel(im_original,0,imy, cval=0.0) # axis 0 is y
magnitude = np.sqrt(imx**2+imy**2)
# Construct the plot
fig = plt.figure(figsize=(10,8))
ax1 = fig.add_subplot(221)
ax1.set_title('Original (Wikipedia)')
ax1.axis('off')
ax1.imshow(im_original, cmap='gray')
ax2 = fig.add_subplot(222)
ax2.set_title('Sobel operator - as shown on Wikipedia')
ax2.axis('off')
ax2.imshow(im_sobel, cmap='gray')
ax3 = fig.add_subplot(224)
ax3.set_title('Sobel operator - from scipy.ndimage')
ax3.axis('off')
ax3.imshow(magnitude, cmap='gray')
plt.savefig('sobel.png')
plt.show()
Изображения
Исходное изображение: Valve_original_ (1) .PNG
Результат, как представлено в Википедии: Valve_sobel_ (3) .PNG