养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

视觉图像:matlab纹理分割编程实例

时间:2024-10-20 21:07:41

绪:使用纹理滤波器进行分割就是利用图像中不同区域的纹理来对图像的区域进行划分;纹理是指一个物体上的颜色模式或者指物体表面的光滑程度;纹理描述图像中的区域特征,试图直观地定量描述诸如光滑、质地等参数;在遥感、医学图像处理和自动化侦查中,纹理分割图像有着很多的应用;利用纹理可以用来检测图像的边界,从而对图像进行分割;主要讲述一个基于纹理分割方法确定纹理区域的示例;工具:matlab目的:使用纹理滤波器在图像中分割出2种类别;使用纹理滤波器分割图像的基本步骤如下:读取图像;创建纹理图像;显示图像不同部分的纹理;使用合适的滤波器进行分割。

视觉图像:matlab纹理分割编程实例

工具/原料

matlab2016a

方法/步骤

1、读取图像:%Step1:ReadImageI1=imread('bag.png');I=rgb2gray(I1);figureimshow(I);

视觉图像:matlab纹理分割编程实例

2、创建纹理图像使用纹理函数entropyfilt()创建纹理图像,返回与输入图像大小相同,每个像素值是输入图像相应像素值邻域的熵值;使用比例函数rescale()变成double图像;%Step2:CreateTextureImageE=entropyfilt(I);%Eim=rescale(E);%figureimshow(Eim);

视觉图像:matlab纹理分割编程实例

3、为底层纹理创建二值掩膜兔脒巛钒图像分割后的图像目标区域显示为白色;与原图像相比,图像顶部的纹理被过度分割,而底部纹理则以一个整体被分割出来;使用bwareaopen函数提取图像的底部纹理;分遥菇障彝割图像的边界并不光滑,并且含有很多孔洞,使用imclose函数对图像执行形态学关操作;使用imfill函数对图像中的孔洞进行填充;%Step3:CreateRoughMaskfortheBottomTextureBW1=imbinarize(Eim,0.8);%阈值分割figureimshow(BW1);imwrite(BW1,'thresholdimg1.png');BWao=bwareaopen(BW1,2000);%开运算,连通域imshow(BWao)nhood=true(11);closeBWao=imclose(BWao,nhood);%闭合孔洞imshow(closeBWao)roughMask=imfill(closeBWao,'holes');%孔洞填充imshow(roughMask)

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

4、使用掩膜图像分割出上层图像%Step4:UseRoughMasktoSegment隋茚粟胫theTopTextureI2=I稆糨孝汶;I2(roughMask)=0;%掩膜操作imshow(I2);imwrite(I2,'segmentimg1.png');E2=entropyfilt(I2);%重计算纹理图像E2im=rescale(E2);imshow(E2im)BW2=imbinarize(E2im);%自适应阈值分割imshow(BW2);mask2=bwareaopen(BW2,1000);imshow(mask2);

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

5、提取底层、上层图像和绘制边界:%S隋茚粟胫tep5:DisplaySegmentationResultstexture1=I;text锇栀劐箨ure1(~mask2)=0;%上层图像imshow(texture1)texture2=I;texture2(mask2)=0;%底层图像figureimshow(texture2)imwrite(texture2,'bottomimg.png');boundary=bwperim(mask2);segmentResults=I;segmentResults(boundary)=255;%绘制边界imshow(segmentResults)

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

6、除了使用entropyfilt函数,还可以使用标准差stdfilt()和rangefilt()来达到类似的分离效果;%Step6:UsingOtherTextureFiltersinSegmentationS=stdfilt(I,nhood);imshow(rescale(S));imwrite(rescale(S),'stdfiltimg.png');R=rangefilt(I,ones(5));imshow(R);imwrite(R,'rangefiltimg.png');

视觉图像:matlab纹理分割编程实例

视觉图像:matlab纹理分割编程实例

7、【注】:matlabrescale()函数:functiony=rescale(x,a,b)%rescale-rescaledatain[a,b]%y=rescale(x,a,b);%Copyright(c)2004GabrielPeyr?ifnargin<2a=0;endifnargin<3b=1;endm=min(x(:));M=max(x(:));y=(b-a)*(x-m)/(M-m)+a;

© 一点知识