正如我之前的许多人一样,我正在尝试实现一个从冈萨雷斯和伍兹的“数字图像处理”一书中锐化图像的例子。在
我创建一个负的拉普拉斯核(-1,-1,-1;-1,8,-1;-1,-1,-1),并将其与图像卷积,然后从原始图像中减去结果。(我还试着取正拉普拉斯系数(1,1,1;1,-8,1;1,1,1)并将其添加到图像中)。在每一个阶段,我将结果拟合到(0255)的范围内,归一化拉普拉斯函数看起来很漂亮,而且是灰色的。在import matplotlib.cm as cm
import scipy.misc
import scipy.ndimage.filters
#Function for plotting abs:
pic_n = 1
def show_abs(I, plot_title):
plt.title(plot_title)
plt.tight_layout()
plt.axis('off')
plt.imshow(abs(I), cm.gray)
#Reading the image into numpy array:
A = scipy.misc.imread('moon1.jpg', flatten=True)
plt.figure(pic_n)
pic_n += 1
show_abs(A, 'Original image')
A -= np.amin(A) #map values to the (0, 255) range
A *= 255.0/np.amax(A)
#Kernel for negative Laplacian
kernel = np.ones((3,3))*(-1)
kernel[1,1] = 8
#Convolution of the image with the kernel:
Lap = scipy.ndimage.filters.convolve(A, kernel)
#Laplacian now has negative values in range (-255, 255):
print('L', np.amax(Lap), np.amin(Lap))
plt.figure(pic_n)
pic_n += 1
show_abs(Lap, 'Laplacian')
#Map Laplacian to the (0, 255) range:
Lap -= np.amin(Lap)
Lap *= 255.0/np.amax(Lap)
print('L', np.amax(Lap), np.amin(Lap))
plt.figure(pic_n)
pic_n += 1
show_abs(Lap, 'Normalized Laplacian')
A += Lap #Add negative Laplacian to the original image
print('A', np.amax(A), np.amin(A))
A -= np.amin(A)
A *= 255.0/np.amax(A)
print('A', np.amax(A), np.amin(A))
plt.figure(pic_n)
pic_n += 1
show_abs(A, 'Laplacian filtered img')
plt.show()
原始图像:
结果:
问题是,最终锐化的图像看起来褪色和灰色。我试着用直方图均衡化来增强对比度,但结果很奇怪。我考虑过应用伽马校正,但我不喜欢自愿选择伽马系数。在
似乎必须有一个简单方便的方法将图像恢复到原始的动态范围。我将非常感谢您对代码的想法和意见。谢谢您!在