基于纹理滤波器的纹理分割

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

读出的图像

阅读和袋子上显示纹理图案的灰度图像。

I=读('包.png');imshow(I)标题('原始图像')

创建纹理图像

使用入口过滤器创建纹理图像。功能入口过滤器返回,其中每个输出像素包含在输入图像中对应的像素周围的9×9附近的熵值的阵列. 熵是随机性的统计度量。

你也可以使用斯特法特兰格菲尔特以获得相似的分割结果。为了与局部熵的纹理图像进行比较,创建纹理图像S公司示出了局部标准差和局部范围,分别。

E=入口滤波器(I);S=标准滤波器(I,1(9));R=范围滤波器(I,1(9));

使用重新缩放重新缩放纹理图像E类S公司使像素值在数据类型图像的期望范围[0,1]内双重的.

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

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

蒙太奇({EIM,辛,R},'大小',[13],'背景颜色',“w”,“边框大小”,20)标题('显示局部熵、局部标准差和局部范围的纹理图像')

创建底部绒面掩膜

本例继续处理熵纹理图像艾姆.您可以重复类似的过程,其他两种类型与其他形态功能的纹理图像来实现类似的分割结果。

阈值重新缩放的图像艾姆以分割的纹理。被选择的0.8的阈值,因为它是沿着大致纹理之间的边界的像素的强度值。

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

二值图像中的分割对象BW1号是白色的。如果你比较BW1号,您会注意到顶部纹理被过度分割(多个白色对象),底部纹理几乎被完全分割。使用移除顶部纹理中的对象B区域打开.

BWao=bwareaopen(bw12000);imshow(BWao)标题('区域打开纹理图像')

使用imclose公司使边缘光滑并在巴沃. 指定与入口过滤器.

nhood=one(9);closeBWao=imclose(BWao,nhood);imshow(closeBWao)标题('闭合纹理图像')

使用imfill填充对象中的孔关闭. 底部纹理的遮罩并不完美,因为遮罩不会延伸到图像的底部。但是,可以使用遮罩分割纹理。

掩模=imfill(关闭bwao,'孔');imshow(掩码);标题('底部纹理遮罩')

使用遮罩分割纹理

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

textureTop=I;textureTop(mask)=0;textureBottom=I;textureBottom(~ mask)=0;蒙太奇({textureTop,textureBottom},'大小'[1 2],'背景颜色',“w”,“边框大小”,20)标题('分段顶部纹理(左)和分段底部纹理(右)')

显示分割结果

创建一个标签矩阵,该矩阵的标签1位于掩码所在的位置标签2,面具在哪里真的. 在原始图像上覆盖标签矩阵。

L=掩码+1;imshow(labeloverlay(I,L))标题('标记的分割区域')

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

边界=b边界(掩码);imshow(labeloverlay(I,边界,“彩色地图”,[0 1 1])标题('纹理之间的边界')

另见

||||||