數字圖像處理 閾值分割


一.實驗題目
參照下圖實現對指紋圖像的基本全局閾值分割。


二.實驗分析

計算基本全局閾值算法思想如下:
① 選擇一個T的初始估計值②用T分割圖像,生成兩組像素:G1由所有灰度值大
於T的像素組成,而G2由所有灰度值小於或等於T的像素組成
③ 對區域G1和G2中的所有像素計算平均灰度值µ1和µ2
④ 計算新的閾值⑤重復步驟②到④,直到逐次迭代所得的T值之差小於事先定義的參數T0
求出閾值T1后,將原圖像中小於T1的賦值為0,否則賦值為1,顯示該圖像即可。

三.實驗程序

I=imread('images_chapter_10\Fig10.29(a).jpg');
subplot(2,2,1);imshow(I);title('原圖');
subplot(2,2,2);imhist(I);title('原圖的直方圖');
% I=double(I);
%T 建議初始化為圖像中最大強度值和最小亮度值的平均值
% T=0.5*(double(min(I(:)))+double(max(I(:))));
% T=mean(I(:));
T=0;%閾值初始化值
T0=0.5; %預定偏差大小
done=false;num=0;%迭代次數
while ~done
g=I>=T;
%由於g或者~g有可能為空,因此必須分情況處理
if(size(I(g),1)==0)T1=mean(I(~g));
elseif(size(I(~g),1)==0)T1=mean(I(g));
else T1=0.5*(mean(I(g))+mean(I(~g)));
end
done=abs(T-T1)<=T0;
T=T1;
num=num+1;
end
T=uint8(T);I2=I>=T;
%graythresh可以直接求出閾值,該函數采用Ostu方法,與通過迭代產生的閾值幾乎沒有區別.
%注意:由於graythresh產生的閾值已被歸一化到范圍[0,1]內,必須在使用時將其縮放到相應
%的范圍,如uint8類圖像,需要乘以255.
T1=graythresh(I)*255;
subplot(2,2,[3 4]);imshow(I2);title('基本全局閾值算法處理結果');
xlabel(['通過程序求得的閾值為',num2str(T),',迭代次數為',num2str(num)]);



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com