【发布时间】:2018-07-10 12:02:00
【问题描述】:
情况
我需要用我的 iPad 检测并计算图像中的这些条纹:
我正在使用 OpenCV,在将图像转换为灰度并均衡直方图后,我得到了这张图片:
当颜色低于某个值(灰度通常为 80)时,我会检查条纹。
问题
有时我有一些光线干扰,我得到这个图像:
我可以看到只有 2 个条纹,因为第三个可能是一些干扰并且没有定义,但是我的算法检测到 3 个条纹,因为颜色低于我的限制 (80)。我无法降低限制,否则我将无法检测到其他图像中的条纹。
有人对如何实现在第一张图像中检测 3 个条纹和在第二张图像中检测 2 个条纹的算法有一些建议?也许不是基于颜色限制,而是基于一些不同的东西,比如衍生物。
甚至只接受想法、不同的语言或伪代码
【问题讨论】:
-
导数听起来是个好主意,您可以尝试这样做,检查对比边缘而不是较暗的颜色。我的意思是,“真实”条纹的边缘很短且对比鲜明,而“假”条纹的边缘被洗掉了很多。所以可能小部分的颜色差异可以为您提供更多信息,而不仅仅是颜色亮度
-
我会尝试,但问题是并非总是有高对比度边缘(如在第一张图片中,如果你看到第三条条纹是白色 -> 灰色 -> 黑色 -> 灰色)。如果边缘被洗掉很多,我如何检测边缘是否短?你对算法的逻辑有什么建议吗?
-
我的意思是,您可以使用样条曲线将这张图片近似为函数,然后使用渐变(或因为您的函数最有可能在一个变量上有所不同 - 它的数值导数)。从概念上讲,与您现在所做的没有真正的区别,但由于导数的限制性质,这可能会让您获得更准确的结果
-
项目和阈值,然后你可以得到类似this
-
使用具有大过滤器大小的自适应阈值。这样就行了。像This. 这样的东西。但内核更大。在该函数中将 11 更改为 51
标签: algorithm opencv image-processing