灰度图像找到最佳阈值转换为二值图像的MATLAB程序?
给你提供2种方法,一种是直方图阈值法;一种是最大类间方差
1、直方图阈值法
用MATLAB实现直方图阈值法:
I=imread('c4.jpg');
I1=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I1);
title('灰度图像')
axis([50,250,50,200]);
gridon;%显示网格线
axison;%显示坐标系
[m,n]=size(I1);%测量图像尺寸参数
GP=zeros(1,256);%预创建存放灰度出现概率的向量
fork=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]);
gridon;%显示网格线
axison;%显示坐标系
I3=im2bw(I,200/255);%
subplot(2,2,4),imshow(I3);
title('阈值200的分割图像')
axis([50,250,50,200]);
gridon;%显示网格线
axison;%显示坐标系
2、自动阈值法:Otsu法
用MATLAB实现Otsu算法:
clc
clearall
I=imread('c4.jpg');
subplot(1,2,1),imshow(I);
title('原始图像')
axis([50,250,50,200]);
gridon;%显示网格线
axison;%显示坐标系
level=graythresh(I);%确定灰度阈值
BW=im2bw(I,level);
subplot(1,2,2),imshow(BW);
title('Otsu法阈值分割图像')
axis([50,250,50,200]);
gridon;%显示网格线
axison;%显示坐标系
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有