我在查找圆形对象边缘的缺陷时遇到问题。这很难描述,所以我有一张可能有所帮助的图片。我试图找到红色标记区域,如下图所示:
我已尝试与模板vision.TemplateMatcher()
匹配,但这只适用于我制作模板的图片。
我尝试将其与vision.CascadeObjectDetector()
匹配,然后我用150张图片训练它。我发现只有< 5%的正确结果。
我也尝试与detectSURFFeatures()
然后matchFeatures()
匹配,但这仅适用于非常相似的缺陷(当边缘未关闭时,它会失败)。
由于缺陷接近圆的一半,我试图用imfindcircles()
找到它,但在那里我发现了很多可能的结果。当我选择具有最高指标的那个时,我会得到正确的,但甚至不接近30%。
你们中有谁知道我能找到至少超过50%的东西吗?
如果某人有想法并想尝试某些内容,我会添加另一张图片。 由于我是新手,我只能添加两张图片,但如果你需要更多,我可以提供更多图片。
答案 0 :(得分:0)
您是否会像之前提供的那样检测平滑二进制叠加层上的粗糙边缘?例如。你正在制作一个程序,其输入包括获得一个带有大量粗糙边缘的黑色图像,然后它应该检测到吗?即在通常非常平滑的区域中突然的粗糙不连续性。
如果上述位置有效,则可以通过经典信号处理来解决。我的观点是,在圆圈外部和内部的任意两点之间的线上绘制强度图。它应该看起来像
.. continuous constant ... continuous constant .. continuous constant.. DISCONTINUOUS VARYING!! DISCONTINUOUS VARYING!! DISCONTINUOUS VARYING!! ... continuous constant .. continuous constant..
编写自己的函数来检测这些不连续性。
OR
梯度:某个量的变化率,与距离测量值有关。
使用非常着名的Sobel(渐变)滤镜。
使用过滤器的X轴版本,参见结果,如果给你一些可检测的东西使用它,对Y轴版本的过滤器也一样。
如果您想知道,如果您正在使用Matlab,那么您只需要获得一个随时可用且备受推崇的3x3矩阵(几乎在互联网上随处可见)并将其插入imfilter函数,或者使用in - 构建实现(edge(image,'sobel'))(如果你有所需的工具箱)。