• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Matlab
  • 标签: 二值化  

资源简介

基于直方图的灰度图二值化程序,可以针对图片,自动寻找一个合适的阈值进行二值化,自己编写的,基于Matlab的程序。

资源截图

代码片段和文件信息

%自适应滤波算法
%程序状态:完成
pic=imread(‘e:\test-pic\mi.jpg‘);
%imshow(pic);
%pic=rgb2gray(pic);
pic=imresize(pic3);
[picxpicy]=size(pic);
%改变原图的直方图分布,测试自适应滤波的效果
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)));

%根据混合高斯模型,自适应二值化
%peak1与peak2记录了从两边数的第一个峰值
%混合高斯模型的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)
   

评论

共有 条评论