金牌会员
- 积分
- 1359
- 威望
- 686
- 贡献
- 453
- 兑换币
- 14
- 注册时间
- 2011-12-30
- 在线时间
- 110 小时
|
从其他论坛上找到的跟大家分享一下,记住要把图像文件放在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
复制代码
|
|