智能车制作
标题:
Matlab双峰法求阈值的代码
[打印本页]
作者:
marazone
时间:
2012-2-9 15:48
标题:
Matlab双峰法求阈值的代码
从其他论坛上找到的跟大家分享一下,记住要把图像文件放在m文件那个目录,smart.jpg是我电脑里面的图片,你们需要自己修改,开头和末尾的tic toc是求运行时间的
tic
clear;clc;clear all
p=imread('smart.jpg');
if ndims(p) == 3
p = rgb2gray(p); %转化为灰度图像
end
subplot(1,3,1)
imshow(p)
title('原来的灰度图像')
[count,x]=imhist(p);
subplot(1,3,2);
plot(x,count)
title('分布直方图')
zl=min(min(p)); %图像的最小灰度值
zk=max(max(p)); %最大图像的灰度值
zl=double(zl);
zk=double(zk);
T(1)=(zl+zk)/2;
T(1)=round(T(1)); %设定初值为最值的平均值
for k=1:6
n1=sum(count(1:T(k)));
n2=sum(count(T(k)+1:256));
sum1=0;sum2=0;
for i=1:T(k)
sum1=sum1+count(i)*i;
end
for i=T(k)+1:256
sum2=sum2+count(i)*i;
end
ua1=sum1/n1;
ua2=sum2/n2;
T(k+1)=(ua1+ua2)/2;
T(k+1)=round(T(k+1));
if T(k+1)==T(k)
break;
end
end
if T(k+1)==T(k);
TT=T(k+1);
disp('The threshold is')
TT
else
TT=0;
disp('error');
end
%得到了阈值TT
[m,n]=size(p);
R=zeros(m,n);
for i=1:m
for j=1:n
if p(i,j)<TT
R(i,j)=0;
else
R(i,j)=255;
end
end
end
R=uint8(R);
subplot(1,3,3);
imshow(R);
title('转化后的图像');
toc
复制代码
作者:
sleep_ball
时间:
2012-3-2 20:56
为什么要用matlab求阈值
作者:
marazone
时间:
2012-3-2 23:58
sleep_ball 发表于 2012-3-2 20:56
为什么要用matlab求阈值
matlab方便观看效果,如果用C语言处理的话,看到二值化前后的图片没有那么方便,matlab只是工具,最后还是得用C语言实现
作者:
abc李瑞华
时间:
2012-5-9 16:55
作者:
王谦623
时间:
2013-3-7 19:44
佩服!
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2