資源簡介
基于直方圖的灰度圖二值化程序,可以針對圖片,自動尋找一個合適的閾值進行二值化,自己編寫的,基于Matlab的程序。
代碼片段和文件信息
%自適應(yīng)濾波算法
%程序狀態(tài):完成
pic=imread(‘e:\test-pic\mi.jpg‘);
%imshow(pic);
%pic=rgb2gray(pic);
pic=imresize(pic3);
[picxpicy]=size(pic);
%改變原圖的直方圖分布,測試自適應(yīng)濾波的效果
for?i=1:picx
????for?j=1:picy
????????pic(ij)=pic(ij)/2;
????end
end
pic=pic+128;
pic=uint8(pic);
figure(1);
imshow(pic);
title(‘原圖‘);
%計算直方圖
figure(2);
pich=imhist(pic);
sigma=2;
t=-floor(3*sigma):1:floor(3*sigma);
g=1/sqrt(2*pi)/sigma*exp(-1/2*(t).^2/sigma^2);
g=g/sum(g);
%imhist(pic);
%plot(pich);
pich1=conv(pichg);
pich1=pich1(floor(3*sigma)+1:size(pich1)-floor(3*sigma));
pich1=pich1/picx/picy;%直方圖歸一化
%pich1=medfilt1(pich13);
plot(pich1);
%指定閾值計算二值圖像
pic1=zeros(size(pic));
[picxpicy]=size(pic);
threshold=0.4;
threshold=threshold*255;
for?i=1:picx
????for?j=1:picy
????????if?pic(ij)<=threshold
????????????pic1(ij)=0;
????????elseif?pic(ij)>threshold
????????????pic1(ij)=255;
????????end
????end
end
figure(3);
imshow(pic1);
title(strcat(‘二值化,sigma=‘num2str(threshold)));
%根據(jù)混合高斯模型,自適應(yīng)二值化
%peak1與peak2記錄了從兩邊數(shù)的第一個峰值
%混合高斯模型的t肯定在這兩個峰值之間
peak1=0;
peak2=0;
for?i=1:256
????if?pich1(i)>pich1(i+1)&&pich1(i+1)>pich1(i+2)&&pich1(i+2)>pich1(i+3)
????????peak1=i;
????????break;
????end
end
for?i=256:-1:1
????if?pich1(i)>pich1(i-1)&&pich1(i-1)>pich1(i-2)&&pich1(i-2)>pich1(i-3)
???
- 上一篇:Matlab Simuli
nk三維圖形顯示模塊 - 下一篇:matlab仿真,lt碼
評論
共有 條評論