数字图象处理.docx
《数字图象处理.docx》由会员分享,可在线阅读,更多相关《数字图象处理.docx(48页珍藏版)》请在冰豆网上搜索。
![数字图象处理.docx](https://file1.bdocx.com/fileroot1/2023-6/10/3005352e-6dc4-422e-85eb-f0753e90dec9/3005352e-6dc4-422e-85eb-f0753e90dec91.gif)
数字图象处理
实验报告
实验名称
图像增强
课程名称
数字图像处理A
1.实验目的
掌握图像增强的几种方法:
A.直方图增强处理
(1)了解空间域图像增强的各种方法(点处理、掩模处理);
(2)通过编写程序掌握采用直方图均衡化进行图像增强的方法;
B.图像平滑
(1)使用邻域平均法编写程序实现图像增强,进一步掌握掩模法及其改进(加门限法)消除噪声的原理;
C.图像锐化
(1)了解并掌握使用微分算子进行图像边缘检测的基本原理;
(2)编写程序使用Laplacian算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质;
(3)掌握使用不同梯度算子(一阶导数算子:
Roberts、Prewitt和Sobel边缘检测算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;
2.实验环境(软件条件)
在Windws2000/XP环境下使用MATLAB7.x开发工具
3.实验方法
(1)首先图像文件的读取:
利用imread函数可以完成图像文件的读取操作。
常用语法格式为:
I=imread('cell_128.bmp');
其作用是将文件名用字符串cell_128.bmp表示的、扩展名(用字符串bmp表示图像文件格式)表示的图像文件中的数据读到矩阵I中。
(2)图像具体处理:
1)直方图处理:
MATLAB图像处理工具箱提供了直方图均衡函数histeq。
其调用格式为:
J=histeq(I,n);
n是均衡化后的灰度级数目,是一个可选参数,缺省值是64。
2)平滑处理:
首先对原图像加噪声,噪声产生函数:
imnoise,其调用格式为:
J=imnoise(I,’type’,parameters)
I是输入图像,J是对I添加噪声后的输出图像。
本题选用噪声类型:
salt&pepper。
再使用imfilter函数进行卷积或相关性滤波来实现图像平滑。
该函数的调用格式为:
B=imfilter(A,H)
3)锐化处理:
3.1)根据给定条件:
①
②
可求出不同情况下相应模板Hi,调用laplacianH1=filter2(H1,I),进行锐化。
3.2)调用J=edge(I,'边缘检测算子’)进行边缘检测。
(3)图像显示:
imhist(I,G);显示相应图像柱状图;
imshow(J);显示图像
4.实验分析
1:
直方图均衡化也叫做直方图均匀化,是将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像,此时图像的熵最大,图像所包含的信息量最大,且扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果。
设一幅图像总像元数为N,灰度级的个数为L,第K个灰度级rk出现的频数为nk,则第k灰度级出现的概率为
此时变换函数可表示为
根据原图像的直方图统计值就可算出均衡化后各像元的灰度值。
直方图上灰度分布较密的部分被拉伸;灰度分布较稀疏的部分被压缩,使图像对比度总体上得到增强。
MATLAB图像处理工具箱提供了直方图均衡函数histeq。
其调用格式为:
J=histeq(I,n);
n是均衡化后的灰度级数目,是一个可选参数,缺省值是64。
2:
图像平滑用于模糊处理和减小噪声。
根据本题要求首先产生一有噪声的图再利用4-邻域平均法平滑加噪声图像。
噪声产生函数:
imnoise,其调用格式为:
J=imnoise(I,’type’,parameters)
I是输入图像,J是对I添加噪声后的输出图像。
本题选用噪声类型:
salt&pepper。
另外使用imfilter函数进行卷积或相关性滤波来实现图像平滑。
该函数的调用格式为:
B=imfilter(A,H)
3:
图像锐化是一种突出和加强图像中景物的边缘和轮廓的技术。
其算子对应于高通滤波器,图像边缘检测主要用于增强图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。
1)拉普拉斯边缘检测算子
拉普拉斯边缘检测算子是一种二阶微分算子,其边缘的增强程度与边缘的方向无关,从而可以满足不同走向的边缘锐化的要求。
定义如下:
由于二阶导数对噪声具有无法接受的敏感性,它的幅度会产生双边缘,而且它不能检测边缘的方向。
但当与其它边缘检测技术组合使用时,拉普拉斯算子是一种有效的补充方法。
在本题中根据给定条件:
①
②
可求出不同情况下相应模板Hi:
H1=[0-10;-15-1;0-10];
H2=[0-10;-14-1;0-10];
H3=[0-20;-29-2;0-20];
H4=[0-20;-28-2;0-20];
2)Roberts边缘检测算子
Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差,即:
然后根据式上式计算出Roberts的梯度幅度值:
它们的卷积算子为:
3)Sobel边缘检测算子
Sobel算子如下:
卷积算子为:
Sobel算子很容易在空间上实现,边缘检测效果较好,且受噪声的影响也较小。
邻域增大抗噪性会更好,但计算量也会增大,得出的边缘也会相应变粗。
Sobel算子会检测出许多伪边缘,边缘定位精度不够高,在精度要求不高时是一种较常用的边缘检测方法。
4)Prewitt边缘检测算子
Prewitt边缘检测算子模板如下:
图像中的每个像素都用这两个作卷积,一个对垂直边缘影响最大,另一个对水平边缘影响最大。
两个卷积的绝对值的最大值作为该点的输出值。
5.实验结论
1:
直方图增强处理
1):
直方图均衡后的图像,相对于原图像,对比度显著的增强。
2):
由于直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同,所以数字图像均衡化后其直方图并非完全均匀分布。
2:
用4-邻域平均法平滑加噪声图像时,:
若不加门限:
图像会变得模糊,噪声相对减小;若加上合适门限,噪声会大幅度减小。
3:
g=f-k
,式子中,f,g分别为锐化前后的图像,k为与扩散效应有关的系数。
式子表示模糊图像f经拉普拉斯算子锐化后得到的不模糊图像g。
在相同条件下对原图像进行边缘检测,利用Roberts、Prewitt和Sobel边缘检测算子,都可以突出图像中的细节或增强被模糊了的细节,但sobel算子处理后的图像边缘较粗。
附件
1.
A1:
直方图增强处理源代码
B1:
图像平滑源代码
C1:
图像锐化源代码:
1):
锐化处理;2):
边缘检测
2.
A2:
直方图增强处理结果图
B2:
图像平滑源代码结果图
C2:
图像锐化源代码结果图:
1):
锐化处理;2):
边缘检测
附件1:
A1:
function[]=di1ti()
clearall;
n=3;
while
(1)
N=input('请选择图像:
\n1----指纹图fing_128.bmp\n2----显微医学图像cell_128.bmp\n0----退出此题\n');
%参数设定:
ifN==1
Q='fing_128.bmp';
p(Q);
elseifN==2
Q='cell_128.bmp';
p(Q);
elseifN==0
clc;break;
end
end
function[]=p(Q)
I=imread(Q);
I=rgb2gray(I);
J=histeq(I);
figure
G=256;
subplot(221);imshow(I);title('原图像');
subplot(222);imshow(J);title('均等化增强后图像');
subplot(223);imhist(I,G);title('原图像柱状图');
subplot(224);imhist(J,G);title('增强后图像柱状图');
B1:
clc;
closeall;
clearall;
I=imread('cell_128.bmp');
I=im2double(uint8(I));%将8位图的图像数据形式转换为双精度型
J=rgb2gray(I);%转换RGB图像或颜色映射表为灰度图像
J1=imnoise(J,'salt&pepper',0.02);%噪声强度为0.02的椒盐噪声
subplot(321);imshow(I);title('原图像');
subplot(322);imshow(J);title('灰度处理后的图像’);
subplot(323);imshow(J1);title('加入椒盐噪声后的图像');
w=[0,1,0;1,1,1;0,1,0];
I_L=imfilter(J1,w)/5;
subplot(324);imshow(I_L);title('四邻域平滑后的图像');
T=2*sum(J1(:
))/128^2;
I_T=zeros(128,128);
fori=1:
128
forj=1:
128
ifabs(J(i,j)-I_L(i,j))>T
I_T(i,j)=I_L(i,j);
else
I_T(i,j)=J(i,j);
end
end
end
colormap(gray);
subplot(325);imshow(I_T);title('加入门限后的图像');
C1:
1):
clearall;
I=imread('lena_256.bmp');
I=im2double(uint8(I));
H1=[0-10;-15-1;0-10];
laplacianH1=filter2(H1,I);
H2=[0-10;-14-1;0-10];
laplacianH2=filter2(H2,I);
H3=[0-20;-29-2;0-20];
laplacianH3=filter2(H3,I);
H4=[0-20;-28-2;0-20];
laplacianH4=filter2(H4,I);
colormap(gray);
subplot(231);imshow(I);title('原图像');
subplot(232);imshow(laplacianH1);title('a=1的g1锐化');
subplot(233);imshow(laplacianH2);title('a=1的g2锐化');
subplot(234);imshow(laplacianH3);title('a=2的g1锐化');
subplot(235);imshow(laplacianH4);title('a=2的g2锐化');
2):
function[]=di3ti()
clearall;
n=4;
while
(1)
N=input('请选择边缘检测算子:
\n1----Roberts\n2----Prewitt\n3----Sobel\n0----退出此题\n');
%参数设定:
ifN==1
Q='Roberts';
p(Q);
elseifN==2
Q='Prewitt';
p(Q);
elseifN==3
Q='Sobel';
p(Q);
elseifN==0
clc;break;
end
end
function[]=p(Q)
I=imread('lena_256.bmp');
J=edge(I,Q);
figure;
subplot(211);imshow(I);
subplot(212);imshow(J);
附件2:
A2:
1):
2):
B2:
C2:
1):
2):
1——Roberts2——Prewitt3——Sobel
实验报告
实验名称
图像压缩
课程名称
数字图像处理A
1.实验目的
(1)掌握离散余弦变换DCT的实现方法,了解DCT的幅度分布特性,从而加深对DCT变换的认识;
(2)掌握图像DCT变换编码的实现方法,从而加深对变换编码压缩图像原理的理解;
(3)使用DCT变换编码编写程序实现图像压缩;
2.实验环境(软件条件)
在Windws2000/XP环境下使用MATLAB7.x开发工具
3.实验方法
此题是用以下典型变换编码系统数字图像lena.bmp处理:
使用DCT变换编码压缩图像步骤如下:
1:
设置JPEG标准化数组;采用JPEG标准推荐的归一化数组,如下表所示:
(主要用在量化时)
表:
JPEG标准化数组
16
11
10
16
24
40
51
61
12
12
14
19
26
58
60
55
14
13
16
24
40
57
69
56
14
17
22
29
51
87
80
62
18
22
37
56
68
109
103
77
24
35
55
64
81
104
113
92
49
64
78
87
103
121
120
101
72
92
95
98
112
100
103
99
2:
求8×8快的DCT变换矩阵;调用dctmtx函数来计算变换矩阵,调用格式为:
D=dctmtx(N)
3:
计算8×8快的DCT变换;调用Y=blkproc(F,[88],’P1*x*P2’,H,H’)。
4:
对DCT系数量化和反量化;分别调用
y2=blkproc(y1,[88],'round(x./P1)',m);
y3=blkproc(y2,[88],'x.*P1',m)
来实现。
5:
求反量化系数的逆DCT变换;调用blkproc函数的y=blkproc(y3,[88],'P1*x*P2',t',t)形式。
6:
重新显示重建图像、误差图像和误差图像的直方图。
其中:
[]=his用于生成直方图数据;
Bar显示图像差值直方图。
4.实验分析
1):
量化初始值为1时,观察图像8×8子块的DCT系数的分布:
t=
0.35360.35360.35360.35360.35360.35360.35360.3536
0.49040.41570.27780.0975-0.0975-0.2778-0.4157-0.4904
0.46190.1913-0.1913-0.4619-0.4619-0.19130.19130.4619
0.4157-0.0975-0.4904-0.27780.27780.49040.0975-0.4157
0.3536-0.3536-0.35360.35360.3536-0.3536-0.35360.3536
0.2778-0.49040.09750.4157-0.4157-0.09750.4904-0.2778
0.1913-0.46190.4619-0.1913-0.19130.4619-0.46190.1913
0.0975-0.27780.4157-0.49040.4904-0.41570.2778-0.0975
发现:
图像8×8子块的DCT系数矩阵中的得数都较很小;矩阵每行元素值绝对值左右对称,这主要是由于DCT变换核函数(如下:
)决定。
a(v)情况类似。
另外,对照原图像发现幅值较大的系数大多集中在低频区;边缘区域的DCT系数高频分量较多,且具有方向性;细节区域的DCT系数高频分量更多,分布较随机;平坦区域的DCT系数高频分量少,主要是低频分量,而DCT变换具有良好的将图像能量或信息集中与低频系数的能力,故而其重建图较好。
对于很小的系数,进行不精确的量化时舍弃它们而将最多信息集中在有贡献的少数系数,产生失真就很小,即得到的重建图像保真度好。
2):
在不同量化初始值及量化步长下,由于量化是有损的,初始值较小时,在一定的量化内容里,图像压缩时是丢失的信息少,因此重建图像失真度小,误差图像信息少,图像差值直方图频率范围相对窄;反之则大。
5.实验结论
1):
从不同量化初始值情况下重建图像、误差图像以及误差图像的直方图分析可知:
量化初始值设置较小时(如0.1),可得到高质量的重建图形;否则重建图形方块边缘多且清晰,图像失真大。
2):
从同一量化初始值,量化步长分别增大为初始值的2倍、4倍、8倍后不同量化值情况下重建图像、误差图像以及误差图像的直方图分析可知:
随着量化步长的增长,重建图形的质量越来越差,即失真度越开越大。
附件
1.
源代码;DCT变换系数矩阵
2.
处理结果图:
1)不同量化初始值情况下;2)同一量化初始值情况下
附件1:
function[]=yasuo()
clearall;
n=5;
S=input('请输入初始量化步长S=');
while
(1)
N=input('请选择量化步长:
\n1----初始值S\n2----初始值的2倍\n3----初始值的4倍\n4----初始值的8倍\n0----退出此题\n');
%参数设定:
ifN==1
Q=S;
p(Q);
elseifN==2
Q=2*S;
p(Q);
elseifN==3
Q=4*S;
p(Q);
elseifN==4
Q=8*S;
p(Q);
elseifN==0
clc;
break;
end
end
function[]=p(Q)
m=[1611101624405161
1212141926586055
1413162440576956
1417222951878062
182237566810910377
243555648110411392
49647887103121120101
7292959811210010399]*Q;
x=imread('lena_256.bmp');
xx=x;
[xm,xn]=size(x);
x=double(x);
t=dctmtx(8)%DCT系数矩阵
y1=blkproc(x,[88],'P1*x*P2',t,t');%DCT变换
y2=blkproc(y1,[88],'round(x./P1)',m);%Q量化
y3=blkproc(y2,[88],'x.*P1',m);%IQ反量化
y=blkproc(y3,[88],'P1*x*P2',t',t);%IDCT
subplot(2,2,1);imshow(xx);title('原始图像');
subplot(2,2,2);imshow(mat2gray(y));title('重建图像');
%求误差图像
d=x-y;
subplot(2,2,3);imshow(mat2gray(d));title('误差图像');
[h,k]=hist(d(:
),512);
subplot(2,2,4);bar(k,h,'k');title('误差图像直方图');
DCT变换系数矩阵:
t=
0.35360.35360.35360.35360.35360.35360.35360.3536
0.49040.41570.27780.0975-0.0975-0.2778-0.4157-0.4904
0.46190.1913-0.1913-0.4619-0.4619-0.19130.19130.4619
0.4157-0.0975-0.4904-0.27780.27780.49040.0975-0.4157
0.3536-0.3536-0.35360.35360.3536-0.3536-0.35360.3536
0.2778-0.49040.09750.4157-0.4157-0.09750.4904-0.2778
0.1913-0.46190.4619-0.1913-0.19130.4619-0.46190.1913
0.0975-0.27780.4157-0.49040.4904-0.41570.2778-0.0975
附件2:
1):
量化初始值为:
0.1
量化初始值为:
1
量化初始值为:
100
2):
为了方便图像比较选取量化初始值为1时:
2----初始值的2倍:
3----初始值的4倍
4----初始值的8倍
1.实验目的
(1)了解并掌握膨胀、腐蚀及开运算、闭运算的基本原理;
(2)编写程序使用开运算、闭运算处理图像,进一步理解开运算、闭运算的实质;
(3)编写程序使用开运算、闭运算进行图像去噪处理,根据实验结果分析效果;
(4)总结实验过程(实验报告,左侧装订):
方案、编程、调试、结果、分析、结论。
2.实验环境(软件条件)
在Windws2000/XP环境下使用MATLAB7.x开发工具
3.实验方法
(1)首先图像文件的读取:
利用imread函数可以完成图像文件的读取操作。
常用语法格式为:
A=imread('curve_128.bmp');
其作用是将文件名用字符串curve_128.bmp表示的、扩展名(用字符串bmp表示图像文件格式)表示的图像文件中的数据读到矩阵A中。
(2)图像具体处理:
1)膨胀、腐蚀处理:
分别调用函数语法:
A1=imdilate(A,B)
A2=imerode(A,B)
2)开、闭操作处理:
分别调用函数语法:
C1=imopen(A,B)
C2=imclose(A,B)
:
B是结构元;用于膨胀腐蚀及开闭运算等操作的结构元素对象
结构元的生成:
用法:
SE=strel(shape,parameters)
创建由指定形状shape对应的结构元素。
其中shape的种类有
arbitrary'、'pair'、'diamond'、'periodicline'、'disk'、'rectangle'、'line'、'square'、'octagon
参数parameters一般控制SE的大小。
(3)图像显示:
imshow(X);显示图像
4.实验分析
1:
腐蚀运算
用B(x)代表结构元素,对工作空间E中的每一点x:
基本过程是:
把结构元素B看作为一个卷积模板,每当结构元素平移到其原点位置与目标图像A中那些像素值为“1”的位置重合时,就判断被结构元素结果中覆盖的子图像的其他像素的值是否都与结构元素相应位置的像素值相同;只有当其都相同时,就将结果图像中的那个与原点位置对应的像素位置的值置为“