在MATLAB图像处理中找到标记区域的区域

时间:2016-04-22 08:15:03

标签: matlab image-processing

我应用了维纳过滤器,然后使用精密边缘检测器来处理裂缝。现在我想找到受裂缝影响的整个区域(它不仅仅是白色像素的区域,而是下面用黄色标记的环境)

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您的最终二进制图像中只有裂缝,您可以尝试一些技巧来近似计算面积,这是非常简单的技术,但可能适用于您的问题。

1)找出所有白色像素的x和y索引(在MATLAB find()命令中会这样做),然后找出x和y坐标的平均值,即图像中所有白色像素的质心,现在你可以找到所有白色像素距质心的距离 为:

d = sqrt((x-xc).^2+(y-yc).^2)

上面的

将给出一个与白色质心相对应的所有白色的距离数组,找出最大距离并选择该距离作为假想圆的半径。现在只需找出这个圈子的区域。

2)如果您将结构作为不同的blob,请提取每个blob的边界框并计算每个边界框的区域并添加所有区域。

3)另一种方法是计算斑点的椭圆面积。您可以从主轴和次轴获得,添加所有椭圆的区域。

4)还有一些复杂的技术可以解决这个问题,例如Convex Hull。你可以从regionprops找到凸包,这将为你提供每个blob的凸包区域。

答案 1 :(得分:0)

我不是100%清楚你如何定义'受裂缝影响的区域',但根据你的草图,它可能是裂缝图像的凸包。所以,从边缘的二进制图像开始:

[X,Y]  = find(edges);
[~,area] = convhull(X,Y)

当然,除非图像顶部附近的那些直线也被视为裂缝,否则它们首先需要以某种方式从edges移除。