资源简介
基于直方图的灰度图二值化程序,可以针对图片,自动寻找一个合适的阈值进行二值化,自己编写的,基于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)
- 上一篇:Matlab Simuli
nk三维图形显示模块 - 下一篇:matlab仿真,lt码
相关资源
- matlab 经典二值化算法
- OTSU二值化算法matlab
- MATLAB图像二值化程序源代码
- 用matlab实现的图像二值化的三种方法
- 图像二值化matlab代码
- 图像二值化的三种方法matlab
- 二值化算法:Otsu算法、Bernsen算法、
- MATLAB GUI 图像二值化处理源文件直接运
- 条纹二值化,细化,轮廓提取源码
- 利用Matlab编写,记录二值化图像像素
- 利用Matlab编写,记录二值化图像像素
- 提取二值化图像的轮廓线
- 图像二值化OTSU方法matlab程序
- DIP 包含二值化、canny算子边缘检测、
- MATLAB图像处理GUI(包括边缘检测、二
- matlab识别英文字母程序 附带图像处理
- 使用MATLAB对图像二值化处理
- hough-circle 读入图像
- two_valuable 灰度图像二值化比较经典的
- matlab的图像进行二值化处理
- MATLAB用niblack算法实现二值化
评论
共有 条评论