主要内容

使用纹理过滤器进行纹理分割

这个例子展示了如何根据纹理识别和分割区域。

读取图像

读取并显示袋子上纹理图案的灰度图像。

我= imread (“bag.png”);imshow(I)标题(原始图像的

图中包含一个坐标轴。标题为“原始图像”的轴包含一个类型为“图像”的对象。

创建纹理图像

使用熵过滤创建纹理图像。函数熵过滤返回一个数组,其中每个输出像素包含输入图像中相应像素周围9×9邻域的熵值.熵是随机性的统计度量。

你也可以用stdfiltrangefilt以达到相似的分割结果。为比较纹理图像的局部熵,生成纹理图像年代R分别显示局部标准偏差和局部范围。

E = entropyfilt(我);S = stdfilt(我的(9));R = rangefilt(我的(9));

使用重新缩放重新缩放纹理图像E年代使像素值在数据类型图像所期望的范围[0,1]

Eim=重新缩放(E);Sim=重新缩放;

在蒙太奇中显示三个纹理图像。

蒙太奇({Eim,Sim,R},“大小”,[1 3],“背景色”' w '“BorderSize”, 20)标题(“显示局部熵、局部标准差和局部范围的纹理图像”

图中包含一个坐标轴。标题为“纹理图像显示局部熵、局部标准差和局部范围”的轴包含一个类型为image的对象。

为底部纹理创建遮罩

本例继续对熵纹理图像进行处理Eim。您可以使用其他形态学功能对其他两种类型的纹理图像重复类似的过程,以获得类似的分割结果。

阈值重新缩放的图像Eim分割纹理。选择阈值0.8,因为它大致是纹理之间边界上像素的强度值。

BW1=imbinarize(Eim,0.8);imshow(BW1)标题(“阈值纹理图像”

图中包含一个轴。标题为阈值纹理图像的轴包含一个图像类型的对象。

二值图像中分割的目标BW1是白色的。如果你比较BW1,你会注意到顶部的纹理被过度分割(多个白色物体),而底部的纹理几乎被整体分割。使用。删除顶部纹理中的对象bwareaopen

BWao=BWao区域打开(BW12000);imshow(BWao)标题(“Area-Opened纹理图像”

图中包含一个轴。标题区域打开的轴纹理图像包含图像类型的对象。

使用imclose磨平边缘,并堵住物体上的任何开口BWao.指定同一个9乘9的街区熵过滤

nhood=1(9);closeBWao=imclose(BWao,nhood);imshow(closeBWao)标题(封闭的纹理图像的

图中包含一个轴。标题为Closed Texture Image的轴包含一个Image类型的对象。

使用imfill填补物体上的洞closeBWao.底部纹理的遮罩并不完美,因为遮罩没有延伸到图像的底部。但是,你可以使用蒙版来分割纹理。

掩码= imfill (closeBWao,“黑洞”);imshow(面具);标题(“底部纹理蒙版”

图中包含一个坐标轴。标题为Mask of Bottom Texture的轴包含一个类型为image的对象。

使用蒙版分割纹理

将纹理分割成两个不同的图像。

textureTop =我;textureTop(面具)= 0;textureBottom =我;textureBottom面具(~)= 0;蒙太奇({textureTop textureBottom},“大小”,[1 2],“背景色”' w '“BorderSize”, 20)标题(“分割顶部纹理(左)和分割底部纹理(右)”

图中包含一个坐标轴。标题为分割顶部纹理(左)和分割底部纹理(右)的轴包含一个类型为image的对象。

显示分割结果

创建一个标签矩阵,标签1在掩码所在的位置还有面具所在的标签符合事实的.在原始图像上叠加标签矩阵。

L =面具+ 1;L) imshow (labeloverlay(我)标题(“标记分割区域”

图中包含一个坐标轴。带有标题标记分割区域的轴包含一个类型为图像的对象。

用青色勾勒出两个纹理之间的边界。

边界= bwperim(面具);imshow (labeloverlay(边界,我“彩色地图”,[0 1]))标题(“纹理之间的界限”

图中包含一个坐标轴。带有标题纹理边界的轴包含一个类型为image的对象。

另请参阅

||||||