求一个用otsu算法的图像分割matlab程序

求一个用otsu算法的图像分割matlab程序,第1张

image_1=imread('E:\ebook\lena.bmp')%读入图片

image_1=rgb2gray(image_1)%灰度

[m,n]=size(image_1)%计算图片的像素点个数,行列,n是列数,Gray

num=zeros(1,256)%存放各灰度级出现的次数

p=zeros(1,256)%存放各灰度级的比率

image_1=double(image_1)%双精度化

for i=1:m

for j=1:n

num(image_1(i,j)+1)=num(image_1(i,j)+1)+1%统计各灰度级的像素点个数

end

end

for i=1:256

p(i)=num(i)/(m*n)%计算各灰度级出现的比率

end

for i=2:256

if p(i)~=0

st=i+1%实现寻找出现比率不为0的最小灰度值

break

end

end

for i=256:-1:1

if p(i)~=0

nd=i-1%实现找出出现比率不为0的最大灰度值

break

end

end

%以下程序实现利用最小方差和法找出门阈值

w=infth=0

for t=st:nd%最小非零比率灰度值到最大非零比率灰度值

qt1=0qt2=0%前景后景像素点比率

u1=0 u2=0%前景后景均值

v1=0 v2=0%

for i=1:t

qt1=qt1+p(i)

end

for i=1:t

u1=u1+i*p(i)/qt1

end

for i=1:t

v1=v1+((i-u1)^2)*p(i)/qt1

end

for i=t+1:256

qt2=qt2+p(i)

end

for i=t+1:256

u2=u2+i*p(i)/qt2

end

for i=t+1:256

v2=v2+((i-u2)^2)*p(i)/qt2

end

if qt1*v1+qt2*v2<w

th=tw=qt1*v1+qt2*v2

end

end

for i=1:m

for j=1:n

if (image_1(i,j)+1>th)

image_2(i,j)=255

else

image_2(i,j)=0

end

end

end

image_2=uint8(image_2)%读入读出变换

figure,imshow(image_2)%显示二值化后的图片

我给你提供2种方法,一种是直方图阈值法一种是最大类间方差

直方图阈值法

用 MATLAB实现直方图阈值法:

I=imread(' c4.jpg ')

I1=rgb2gray(I)

figure

subplot(2,2,1)

imshow(I1)

title(' 灰度图像')

axis([50,250,50,200])

grid on %显示网格线

axis on %显示坐标系

[m,n]=size(I1) %测量图像尺寸参数

GP=zeros(1,256) %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(I1==k))/(m*n) %计算每级灰度出现的概率,将其存入GP中相应位置

end

subplot(2,2,2),bar(0:255,GP,'g') %绘制直方图

title('灰度直方图')

xlabel('灰度值')

ylabel(' 出现概率')

I2=im2bw(I,150/255)

subplot(2,2,3),imshow(I2)

title('阈值150的分割图像')

axis([50,250,50,200])

grid on %显示网格线

axis on %显示坐标系

I3=im2bw(I,200/255) %

subplot(2,2,4),imshow(I3)

title('阈值200的分割图像')

axis([50,250,50,200])

grid on %显示网格线

axis on %显示坐标系

自动阈值法:Otsu法

用MATLAB实现Otsu算法:

clc

clear all

I=imread(' c4.jpg ')

subplot(1,2,1),imshow(I)

title('原始图像')

axis([50,250,50,200])

grid on %显示网格线

axis on %显示坐标系

level=graythresh(I)%确定灰度阈值

BW=im2bw(I,level)

subplot(1,2,2),imshow(BW)

title('Otsu 法阈值分割图像')

axis([50,250,50,200])

grid on %显示网格线

axis on %显示坐标系


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11631096.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存