阈值分割之迭代阈值法
clear,clc,close all;
Image=im2double(rgb2gray(imread('lotus.jpg')));
figure,imshow(Image),title('原始图像');
T=(max(Image(:))+min(Image(:)))/2;%初始阈值
equal=false;
while ~equal
ro=find(Image>=T);
rb=find(Image<T);
NewT=(mean(Image(ro))+mean(Image(rb)))/2;%计算新的阈值
equal=abs(NewT-T)<1/256;%迭代截止条件
T=NewT;
end
result=im2bw(Image,T);%对分割图像进行二值化处理
figure,imshow(result),title('迭代方法二值化图像 ');
imwrite(result,'lotus1diedai.jpg');
原图
分割后图像
(1)首先读入图像数据转为灰度图Image
(2)直接设定初始阈值,就是最大灰度值与最小灰度值的中间值
(3)在循环体求出前景图和背景图的坐标,利用find函数实现,返回一个值返回的就是坐标
(4)然后Image(ro)和Image(rb)分别就是前景图和背景图的目标值,对它们用mean函数取均值然后再平均就是新的阈值
(5)在循环里面设定一个退出循环条件,可以设定上一次的阈值T和这一次的阈值T相差多少就退出循环即可。
(6)找到了阈值T,直接对它进行二值化即可
只要理解了迭代法找阈值,这个代码就超级容易实现了