%a为原始图像,图像大小为[width,height]
%迭代计算最佳阈值T
% output 是输出的结果图像
value=255/2; %设定初始迭代阈值T0
old=0; % 前一次迭代计算得到的阈值
%1 迭代运算过程,计算最佳分割阈值。
while(abs(value-old)>01)
%阈值分割就是将像素分割成两类,现用 sum1和 sum2计算两类的和,n和m 用来计数。
% 下面是这些变量的初始化过程
old=value;
sum1=0
n=0;
sum2=0;
m=0;
% 迭代分类过程
for i=1:width
for j=1:height
if a(i,j)<value
sum1=sum1+a(i,j);
n=n+1;
else
sum2=sum2+a(i,j);
m=m+1;
end
end
end
%计算新的分割阈值T
value=(sum1/n+sum2/m)/2;
end
% 2 用得到的最终阈值对图像二值化。
output=a;
for i=1:width
for j=1:height
if a(i,j)<value
output(i,j)=0; %output是二值化的结果
end
end
end
代码写错了
%% 迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较
clc;
clear all;
close all;
f=imread('8_256_lenabmp','bmp');
subplot(2,2,1);
subimage(f);title('原始图像');
f=double(f);
T=(min(f(:))+max(f(:)))/2;
done=false;
i=0;
while ~done
r1=find(f<=T);
r2=find(f>T);
Tnew=(mean(f(r1))+mean(f(r2)))/2;
done=abs(Tnew-T)<1;
T=Tnew;
i=i+1;
end
f(r1)=0;
f(r2)=1;
subplot(2,2,2);
subimage(f);title('迭代阈值二值化图像图像');
f=imread('8_256_lenabmp','bmp');
subplot(2,2,3);
subimage(f);title('原始图像');
T=graythresh(f);
g=im2bw(f,T);
subplot(2,2,4);
subimage(g);title('Otsu方法二值化图像');
以上就是关于灰度图像找到最佳阈值转换为二值图像的MATLAB程序全部的内容,包括:灰度图像找到最佳阈值转换为二值图像的MATLAB程序、图像分割matlab程序,运行后,分割结果为全黑,阈值th显示128,这是什么情况请求解答、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)