使用MATLAB

时间:2016-05-10 15:08:43

标签: image matlab image-processing matlab-cvst

我在查找圆形对象边缘的缺陷时遇到问题。这很难描述,所以我有一张可能有所帮助的图片。我试图找到红色标记区域,如下图所示:

I try to find the red marked areas. In this picture

我已尝试与模板vision.TemplateMatcher()匹配,但这只适用于我制作模板的图片。

我尝试将其与vision.CascadeObjectDetector()匹配,然后我用150张图片训练它。我发现只有< 5%的正确结果。

我也尝试与detectSURFFeatures()然后matchFeatures()匹配,但这仅适用于非常相似的缺陷(当边缘未关闭时,它会失败)。

由于缺陷接近圆的一半,我试图用imfindcircles()找到它,但在那里我发现了很多可能的结果。当我选择具有最高指标的那个时,我会得到正确的,但甚至不接近30%。

你们中有谁知道我能找到至少超过50%的东西吗?

如果某人有想法并想尝试某些内容,我会添加另一张图片。 由于我是新手,我只能添加两张图片,但如果你需要更多,我可以提供更多图片。

enter image description here

Object before edge detection Object after edge detection

1 个答案:

答案 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'))(如果你有所需的工具箱)。