資源簡介
通過求差分曲線,利用閾值分割算法對圖像進行自動多閾值分割
代碼片段和文件信息
function?auto_thresh(imLSH)
%?im=imread(‘rice.tif‘);
%?a=imread(‘mytu.tif‘);
%?im=rgb2gray(a);
count=imhist(im);
u=diff(count);%??Difference?and?approximate?derivative.求差分曲線
%?for?i=1:255
%?????u(i)=count(i+1)-count(i);?
%?end
k=1;
for?i=1:254?????????%找出差分曲線由負到正的過零點的位置(谷底位置)
????if?u(i)<0
????????if?u(i+1)<0??????
????????????i=i+1;
????????elseif?u(i+1)>0
???????????????d(k)=i+0.5;????????????????
???????????????k=k+1;
????????elseif?u(i+1)==0
???????????????for?j=1:50
???????????????????if?(i+j<255&u(i+j)==0&u(i+j+1)>0)??????????????????????
???????????????????????d(k)=i+0.5*j+0.5;????????????????
???????????????????????k=k+1;
???????????????????????break;
???????????????????else?
???????????????????????break;
???????????????????end
???????????????end
???????????end
???????end
??end
??D=diff(d);
%???for?i=1:k-2
%???????D(i)=d(i+1)-d(i);?????%求各小峰的峰寬
%???end
??dd=uint8(D);
??count1=imhist(dd);????????????%統計峰寬度的直方圖
??DD=find(count1);????????????
??kd=size(DD);
??n=round(0.7*(kd(1)-1)*2);????????%求出平滑窗口的尺寸
??imm=wiener2(im[nn]);????%平滑原始直方圖
??p=imhist(imm);
??
%?由平滑直方圖確定區域類數(加入判斷獨立峰的三條準則)
%??for?i=1:255
%?????p1(i)=p(i)-p(i+1);?????%求差分曲線
%?????p2(i)=p(i+1)-p(i);
%??end
p2=diff(p);
p1=-p2;
k1=1;
for?i=1:254???????????????%找出差分曲線由負到正的過零點的位置(峰點位置)
????if?p1(i)<0
????????if?p1(i+1)<0??????
????????????i=i+1;
????????elseif?p1(i+1)>0
???????????????dp(k1)=i+0.5;????????????????
???????????????k1=k1+1;
????????elseif?p1(i+1)==0
???????????????j=2;
???????????????while?(j<20&i+j<256)
???????????????????if?p1(i+j)==0
???????????????????????j=j+1;
???????????????????elseif?p1(i+j)>0??????????????
???????????????????????dp(k1)=i+0.5*(j-1)+0.5;????????????????
???????????????????????k1=k1+1;
???????????????????????break;
???????????????????else
???????????????????????break;
??????????????????
評論
共有 條評論