[m n]=size(I)
I1=zeros(m,n)
for i=1:m
for j=1:n
if I(i,j)>t1
I1(i,j)=1
else
I1(i,j)=0
end
end
end
subplot(2,3,3)imshow(I1)
我给你提供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 %显示坐标系
OTSU算法又叫最大类间方差阈值分割算法,也叫大津算法(大津展之 Ōtsu Nobuyuki),主要用于一些简单的阈值确定。
对于下面这张灰度图片:
我们想让这些物体(前景)和背景区分更明显一些,比如让物体为纯黑,背景全白。那么我们就需要找到一个合适的阈值,使图片上灰度值大于这个阈值的像素点为255(白色),灰度值小于阈值的像素点为0(黑色)。也就是变成下面这幅图:
怎样确定这个阈值呢?OTSU算法说,我们可以求出用这个阈值分割后的两个图像对应pixel的类间方差。对于每一个可能的阈值,我们计算并取出类间方差最大的那个像素pixel值,此时这个值就可以较好的对图像进行分割。
对应直方图如下:
1、将灰度值区间为[0,m],对于[0,m]间的每一个灰度t,将它作为阈值将图像分割为灰度为[0,t]以及[t+1,m]两部分。
2、计算每一部分的所占比例 , ,每一部分的平均灰度值 , ,以及总的平均灰度值 。
3、计算他们的类间方差:
4、取出类间方差最大时对应的阈值t,这就可以作为我们最终所取的阈值。
小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下 谢谢你!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)