資源簡介
數字圖像處理大津法閾值分割

代碼片段和文件信息
function?otsu=otsu(Im)
%大津法計算閾值
I=double(Im);
IMAX=max(max(I));
IMIN=min(min(I));
T=double(IMIN:IMAX);
ISIZE=size(I);?%圖像大小
muxSize=ISIZE(1)*ISIZE(2);
tic???%計時器
for?i=1:length(T)
????%從最小灰度值到最大灰度值分別計算方差
????TK=T(1i);
????ifground=0;
????ibground=0;
????%定義前景和背景的灰度總和
????FgroundS=0;
????BgroundS=0;
????for?j=1:ISIZE(1)
????????for?k=1:ISIZE(2)
????????????tmp=I(jk);
????????????if(tmp>=TK)
????????????????ifground=ifground+1;
????????????????FgroundS=FgroundS+double(tmp);?%前景灰度值
????????????else
????????????????%背景像素點的計算
????????????????ibground=ibground+1;
????????????????BgroundS=BgroundS+double(tmp);
????????????end
????????end
????end
????%計算前景和背景的比例、平均灰度值
????%這里存在一個0分母的情況,導致警告,但不影響結果
????w0=ifground/muxSize;
????w1=ibground/muxSize;
????u0=FgroundS/ifground;
????u1=BgroundS/ibground;
????T(2i)=w0*w1*(u0-u1)*(u0-u1);
end
%遍歷后尋找I第二行的最大值
oMax=max(T(2:));
%第二行方差的最大值,忽略NaN
idx=find(T(2:)>=oMax);
%獲得算法運行時間
%?disp(strcat(‘大津法時間:‘num2str(toc)));
%方差最大值所對應的序列號
T=uint8(T(1idx));
%顯示最佳閾值
%?disp(strcat(‘大津法計算閾值為:‘num2str(T)));
%從第一行取出灰度值作為賦值
otsu=T;
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1297??2016-12-08?21:09??otsu.m
- 上一篇:圖像處理最大熵閾值分割法
- 下一篇:openvr for htc vive
評論
共有 條評論