对图像进行去模糊处理以执行边缘检测

时间:2018-07-13 08:04:28

标签: python python-3.x opencv image-processing edge-detection

我有这张图片:

enter image description here

我正在尝试将背景聚焦,以便对图像进行边缘检测。我可以使用哪些方法(要么 空间/频率字段)?


我尝试的是以下内容:

kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
im = cv2.filter2D(equ, -1, kernel)

这将输出此图像:

enter image description here

我也尝试过中心值,但没有正面结果。

我也尝试过:

psf = np.ones((5, 5)) / 25
equ = convolve2d(equ, psf, 'same')
deconvolved = restoration.wiener(equ, psf, 1, clip=False)
plt.imshow(deconvolved, cmap='gray')

图像没有明显变化。

对此事的任何帮助,将不胜感激!


编辑:

这是我从here获取的代码:

psf = np.ones((5, 5)) / 25
equ = convolve2d(equ, psf, 'same')
deconvolved, _ = restoration.unsupervised_wiener(equ, psf)
plt.imshow(deconvolved, cmap='gray')

这是输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

对图像进行模糊处理(很不幸)非常困难,其原因是模糊处理可以消除噪点,因此,当您对图像进行模糊处理时,有多个(嘈杂的)图像会产生相同的图像。这意味着,在对计算机进行去模糊处理时,没有简单的方法可以让计算机“选择”哪些嘈杂的图像。因此,去模糊通常会产生嘈杂的图像。

现在,您可能会问摄影师在现实中是如何做到的。好吧,它们实际上并没有对图像进行模糊处理,而是对其进行了锐化(这略有不同)。锐化图像时,会增加边框附近的对比度以突出它们(这就是为什么有时会在锐化程度过高的图像上有时会在边框周围看到光晕的原因。)

在这种情况下,您想对其进行去模糊处理(并且没有卷积内核可以使您执行此操作)。为了以一种好的方式做到这一点,您首先需要知道什么过程会使图像模糊(也就是说,如果您不想在特殊软件上花费数千美元,或者没有数学或天文学的硕士学位) 。

如果您仍然想这样做,建议您搜索反卷积;如果您不知道模糊过程,则建议盲式反卷积。 skimage中有一些(粗略的)函数可以帮助您(http://scikit-image.org/docs/stable/auto_examples/filters/plot_restoration.html#sphx-glr-auto-examples-filters-plot-restoration-py)。

最后,Jax Briggs中的最后一个链接似乎很有帮助,但我不会为获得神奇的结果而努力。