matlab图像处理之图像分割处理

    xiaoxiao2022-07-02  105

    中值滤波

    利用中值滤波的方法对图像进行平滑处理,函数如下

    fig_med = medfilt2(fig,[m,n]) % 对矩阵[m,n]进行中值滤波

    类间方差阈值算法

    利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像; 子函数如下所示:

    function[threshold]=Ostu(fig) s=256^2; N=zeros(256,1); %-----------各个灰度值出现次数 T=zeros(256,1); for k=0:255 %-----------各个灰度值出现次数计数 num=size(find(fig==k),1); N(k+1,1)=num; end for t=1:256 w0=0; w1=0; u0=0; u1=0; for m=1:t w0=w0+N(m,1)/s; u0=u0+(m-1)*N(m,1)/s; end for m =t:256 w1=w1+N(m,1)/s; u1=u1+(m-1)*N(m,1)/s; end u0=u0/w0; u1=u1/w1; T(t,1)=w0*w1*(u1-u0)^2; end threshold=find(T==max(max(T)))-1; end

    图像分割

    m=3; n=3; fig = imread('dock.png'); fig = rgb2gray(fig); subplot(1,3,1); imshow(fig); title('原图'); fig_med = medfilt2(fig,[m,n]); %-------------中值滤波器 threshold=Ostu(fig_med); fig_segment=fig_med; fig_segment(fig_segment<threshold)=0; fig_segment(fig_segment>=threshold)=255; subplot(1,3,2); imshow(fig_med); title('中值滤波'); subplot(1,3,3); imshow(fig_segment); title('图像分割');

    展示效果

    笔者做了一个GUI界面,可以输入任意m,n值来改变中值滤波的效果。

    原图:

    效果如下:

    最新回复(0)