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

原图:
Alt

效果如下:
在这里插入图片描述

  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值