数字图像灰度图像二值化实验报告matlab实现1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像灰度图像二值化实验报告matlab
实现
数字图像处理
实验报告
实验二灰度图像的二值化处理
学号
姓名
日期
实验二灰度图像的二值化处理
一、实验目的
图像二值化是数字图像处理技术中的一项基本技术,二值化图像的显示与打印十分方便,存储与传输也非常容易,在目标识别、图像分析、文本增强、字符识别等领域得到广泛应用。图像二值化是将灰度图像转化为只有黑白两类像素的图像,大多采用阈值化算法处理。在不同的应用中,阈值的选取决定着图像特征信息的保留。因此,图像二值化技术的关键在于如何选取阈值。
二、实验内容
1、编程绘制数字图像的直方图。
2、灰度图像二值化处理。
三、实验要求
1、自己选择灰度图像。
2、选择多种阈值分割算法,并比较和分析图像二值化处理的结果。
3、使用VC++编程序。
四、设计思想(阈值选取算法)
灰度图像是指只含亮度信息,不含色彩信息的图像,将彩色图像转化成为灰度图像的过程称为图像的灰度化处理。图像的二值化处理就是将图像上的点的灰度置为0或255,也就是使整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。阀值分割选取算法有:典型的全局阀值算法的Otsu 算法、局部阀值方
法中的Bersen算法、灰度拉伸法、直方图方法等等。
1.Otsu算法的设计思想:设阀值将图像分割成两组,一组灰度对应目标,
另一组灰度对应背景,则这两组灰度值的类内方差最小,两组的类间方差最大。对图像设阈值将图像分割成两组,一组灰度对应目标,另一组灰度对应背景,则这两组灰度值的类内方差最小,两组的类间方差最大。
2.Bersen算法的设计思想:把灰度阈值选取为随像素位置变化而变化的
函数,它是一种动态选择阈值的自适应方法。
3.灰度拉伸算法设计思想:灰度拉伸又叫对比度拉伸,它是最基本的一
种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围。
4.直方图算法的设计思想:把原始图像的灰度直方图从比较集中的某个
灰度区间变成在全部灰度范围内的均匀分布。
五、源程序(附上注释)
1. OTSU算法代码:
I=imread('2.jpg');
th=graythresh(I);
J=im2bw(I,th);
subplot(121)
imshow(I);
subplot(122)
imshow(J);
2. Bernsen算法代码:
%Bernsen算法代码:
clc;
clear all
close all
I=imread('2.jpg');
[m,n] = size(I);
I_gray=double(I);
T=zeros(m,n);
M=3;
N=3;
for i=M+1:m-M
for j=N+1:n-N
max=1;min=255;
for k=i-M:i+M
for l=j-N:j+N
if I_gray(k,l)>max
max=I_gray(k,l);
end
if I_gray(k,l)min=I_gray(k,l); end
end
end
T(i,j)=(max+min)/2;
end
end
I_bw=zeros(m,n);
for i=1:m
for j=1:n
if I_gray(i,j)>T(i,j)
I_bw(i,j)=255;
else
I_bw(i,j)=0;
end
end
end
subplot(121),imshow(I);
subplot(122),imshow(I_bw); 3. 改进的Bernsen算法代码:clc;
clear all
close all
I=imread('2.jpg');
I_gray=double(I);
[m,n] = size(I);
a=0.3;
A=0;T1=0;S=0;
for i=1:m
for j=1:n
A=A+I_gray(i,j) ;
end
end
A=A*0.9;
while(ST1=T1+1;
for i=1:m
for j=1:n
if(I_gray(i,j)==T1)
S=S+I_gray(i,j);
end
end
end
end
T2=zeros(m,n);
T3=zeros(m,n);
M=3;
N=3;
for i=M+1:m-M
for j=N+1:n-N
max=1;min=255;
for k=i-M:i+M
for l=j-N:j+N
if I_gray(k,l)>max
max=I_gray(k,l);
end
if I_gray(k,l)min=I_gray(k,l); end
end
end
T2(i,j)=(max+min)/2;
T3(i,j)=max-min;
end
end
T4=medfilt2(T2,[M,N]);
T5=(T1+T4)/2;
I_bw=zeros(m,n);
for i=1:m
for j=1:n
if I_gray(i,j)>(1+a)*T1
I_bw(i,j)=255;
end