模糊边缘检测

Blurry edge detection

我对图像处理和识别的背景知识很少。我正在尝试检测灰度图像(例如肖像)上的主要 edges/grayscale 过渡。问题是在某些部分,边缘模糊(因为聚焦)。我正在使用具有多个阈值的 Canny 边缘检测器,但我永远无法检测到那些边缘(下巴、衣服、耳朵、脸的侧面……)

原图: 这是我得到的结果:胡子,锋利的边缘 这是我感兴趣的功能:主要灰色区域之间的过渡

边缘检测是解决此问题的正确工具吗? 谢谢!


UPDATE:使用 Deriche 过滤并在边缘检测之前将图像大小减半(使用 apertureSize=7),我让它的工作非常接近我想要的。

几乎不可能检测到这些边缘,因为它们太模糊了。

边缘检测通过分析周围像素颜色的快速变化来工作。模糊使像素变得平滑,这使得变化变得不那么强烈,因此没有检测到边缘。

您可以尝试在边缘检测之前应用强锐化过滤器,但是,我认为对于这种模糊量,边缘检测将无法按预期工作。

即使你提高边缘检测参数来检测那些模糊的边缘,你也会得到很多误报,使算法无用。

我唯一能想到的就是基本上裁剪区域,然后应用傅里叶 (DFT)。然后根据振幅阈值分离像素,保持模式并将其应用于您的主图像(或仅使用反向傅立叶)。或者,您可以尝试以指数级执行此操作,以扩大与背景对应的像素值与与图像对应的像素值之间的差距。

当然,所有这些建议都是 one-off 针对单张照片或在相同条件下拍摄的一系列照片(例如 MRI)量身定制的解决方案。

我真的没有看到以全自动方式执行此操作的很多可能性。

ANN 解决方案

如果想求助于 ANN(人工神经网络)并设计一个,这当然不能保证成功,但它会 - 至少在原则上 - 取决于它的设计程度。如果您想更深入地了解 ANN 在复杂图像处理中的使用,请阅读 IEEE 的这篇会议论文。

T. Kondo, J. Ueno, and S. Takao. Medical Image Recognition of Abdominal Multi-organs by Hybrid Multi- layered GMDH-type Neural Network Using Principal Component-Regression Analysis. In Second International Symposium on Computing and Networking (CANDAR), pages 157–163. Institute of Electrical and Electronics Engineers, IEEE, Dec. 2014.

自定义过滤器和数学原理

以下是您可能会觉得方便的一些数学原理:

值得尝试自定义过滤器,例如:

-------------
| 1 | 2 | 1 |
-------------
| 0 | 0 | 0 |
-------------
|-1 |-2 | 1 |
-------------

请注意,这不会过滤任何(完全)垂直线。但是,您可以调换它,这样它就会相反。您也可以尝试将滤镜应用于二值图像(黑白),而不是灰度图像。

对于这样的滤波器,您可能仍然希望对傅立叶进行计算以减少计算量并优化程序。

原则上,您可以用卷积来解释线性过滤:

Y = f[X; G] = X ⓧ G_{flip}

其中 G 是 kernel/mask 并且 G_{flip} 是翻转内核掩码。

卷积

二维卷积的定义为:

X ⓧ G = Summation(∞, k=-∞){Summation(∞, l=-∞) x[i-k, j-l].G[k,l]}

这不是您问题的完整答案,但我希望它能在一定程度上帮助您。

使用 canny-deriche 过滤器你可以找到:

完整代码为here