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

中值滤波

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

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值来改变中值滤波的效果。

原图:
matlab图像处理之图像分割处理_第1张图片

效果如下:
matlab图像处理之图像分割处理_第2张图片

你可能感兴趣的:(图像处理,matlab,图像处理,图像分割)