基于MATLAB的数字图像处理.docx
- 文档编号:12670311
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:18
- 大小:382.92KB
基于MATLAB的数字图像处理.docx
《基于MATLAB的数字图像处理.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字图像处理.docx(18页珍藏版)》请在冰豆网上搜索。
基于MATLAB的数字图像处理
目录
1引言2
2设计使用软件3
2.1MATLAB简介3
2.2matlab基本操作3
3图像几何变换设计原理5
3.1图像几何变换设计说明5
3.2图像平移理论基础5
3.3图像缩放的理论基础6
3.4双线性插值法7
3.5最邻近差值法8
4图像变换总体设计9
4.1基于MATLAB的GUI设计9
4.2插入图像10
4.3图像的平移变换12
4.3.1图像右下方平移12
4.3.3图像左上方平移14
4.4图像的缩放变换17
4.4.1基于双线性插值法的图像缩放17
4.4.2邻近插值法的图像缩放18
5心得体会19
参考文献20
附录一21
1引言
数字图像处理技术是20世界60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。
它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或变成以完成各自的计算。
MATLAB中集成了功能强大的图像处理工具箱。
由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
MATLAB是一种以矩阵运算为基础的交互式程序语言,能够满足科学、工程计算和绘图的要求,与其它计算机语言相比,其特点是简洁和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。
我们学习掌握MATLAB,也可以说是在科学工具上与国际接轨。
2设计使用软件
2.1MATLAB简介
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为四大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连
接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2.2matlab基本操作
Matlab中基本变量都是以矩阵的形式保存的。
一幅图像即是一个二维的矩阵。
变量名区分大小写,如a和A表示两个不同的变量。
图像I中第i行第j列的像素用I(i,j)表示,其中行号和列号都从1开始计数。
要了解更多关于Matlab的基本知识,可看Matlabhelp下的Matlab目录。
本实验可能用到的matlab函数有:
zeros,imwrite,imread,imshow,FFT2,abs,log,min,max,查询具体的函数用法可以在Matlabhelp中查找,或在Matlabcommandwindow中打(空格)函数名。
在Matlabcommandwindow中的命令在打回车后直接执行。
也可以在m-fileeditor中编写程序,存盘为.m文件后,按Debug菜单下的Run,自动逐条执行命令。
Debug菜单下还提供了设置断点逐行执行等调试命令。
做本实验时可先在commandwindow中熟悉Matlab命令与函数,最后所有命令应保存在一个m文件中,便于检查和调试。
每次画图前可用figure命令新开一个图像窗口,否则前一次显示的图像会被新的图像覆盖。
也可用figure(n)命令规定当前图像窗口序号。
3图像几何变换设计原理
3.1图像几何变换设计说明
数字图像几何变换是一种用途广泛的图像处理技术,在图像校正、图像匹配、图像变形等方面有广泛用途。
图像的几何变换需要两个过程:
空间变换和灰度插值,需要对离散数据组成的象素位置和间距进行重新采样,以构成几何变换后的新图像,即根据离散的数字图像重建二维连续函数,再按新的像素位置和间距进行采样。
要求编程实现图像的平移、缩放两种几何变换,插值分别采用最近邻插值和双线性插值。
在图像的几何变换中,通常包括图像的平移、图像的转置、图像的镜像变换、图像的缩放和图像的旋转等。
几种图像几何变换中都是1:
1的变换,而图像的缩放操作会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。
一般的方法是直接赋值为和它最相近的像素值,但也可以通过一些插值算法来计算。
下面的代码直接采用了前一种做法。
3.2图像平移理论基础
图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。
设(x0,y0)为原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0,y0)坐标将变为(x1,y1)。
显然(x0,y0)和(x1,y1)的关系如下:
用矩阵表示如下:
对该矩阵求逆,可以得到逆变换:
即
这样,平移后的图像上的每一点都可以在原图像中找到对应的点。
例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx,-ty)。
如果tx或ty大于0,则(-tx,-ty)不在原图中。
对于不在原图中的点,可以直接将它的像素值统一设置为0或则255(对于灰度图就是黑色或白色)。
同样,若有点不在原图中,也就说明原图中有点被移出显示区域。
如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx|,高度扩大|ty|。
3.3图像缩放的理论基础
假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原始图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:
其逆运算如下:
即
例,当fx=fy=0.5时,图像被缩一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。
在原图基础上,每行隔一个像素进行取点,每隔一行进行操作。
其实是将原图每行中的像素取值重复一遍,然后每行重复一次。
3.4双线性插值法
双线性插值[是利用了需要处理的原始图像像素点周围的四个像素点的相关陛,通过双线眭算法计算得出的。
对于一个目的坐标,通过向后映射法得到其在原始图像的对应的浮点坐标(i+u,j+v),其中i,j均为非负整数,u,v为[0,l]区间的浮点数,则这个像素的值f(i+u,j+v)可由原图像中坐标为(i,j)、(i+l,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:
f(i+u,j+v)=(1-u)×(1-v)×f(i,j)+(1-u)×V×f(i,j+1)+u×(1-v)×f(i+l,j)+u×v×f(i+l,j+1),其中f(i,j)表示源图像(i,j)处的的像素值,这就是双线性内插值法。
如图3.1所示,已知(0,0)、(0,1)、(1,0)、(1,1)四点的的灰度,可以由相邻像素的灰度值f(0,0)和f(1,0)在X方向线性插值求出(x,0)的灰度f(x,0),由另外两个相邻像素f(0,1)和f(1,1)在X方向上线性插值可求出(x,1)的灰度f(x,1),最后由f(x,0),f(x,1)在Y方向上进行线性插值就可以得到(x,y)的灰度f(x,y)。
在同一行内根据待插值像素点与其前后的原图像像素点的位置距离进行加权线性插值,即离原图像像素点越近的待插值像素点,原图像像素的加权系数就越大;行间根据待插值行与其上下的原图像行间的距离进行加权线性插值,即离原图像行越近的待插值行,原图像行的加权系数就越大。
图3.1双线性插值原理
3.5最邻近差值法
最简单的插值算法是最邻近插值,也称为零阶插值。
它输出的像素灰度值就等于距离它映射到的位置最近的输入像素的灰度值,最邻近插值算法简单,在许多情况下都能得到令人满意的结果,但是当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。
双线性插值算法计算量比零阶插值大,但缩放后图像质量高,不会出现像素值不连续的的情况,这样就可以获得一个令人满意的结果[2,6]。
最邻近点插值[6]取插值点的4个邻点中距离最近的邻点灰度值作为该点的灰度值。
设插值点(i,j)到周边4个邻点fk(i,j)(k=1,2,3,4)的距离为dk(k=1,2,3,4),则:
g(i,j)=fk(i,j),dl=min{d1,d2,d3,d4},l=1,2,3,4。
4图像变换总体设计
4.1基于MATLAB的GUI设计
图形用户界面(GUI)是用户与计算机程序之间的交互方式,是用户与计算机进行信息交流的方式。
计算机在屏幕显示图形和文本,若有扬声器还可产生声音。
用户通过输入设备,如:
键盘、鼠标、跟踪球、绘制板或麦克风,与计算机通讯。
用户界面设定了如何观看和如何感知计算机、操作系统或应用程序。
通常,多是根据悦目的结构和用户界面功能的有效性来选择计算机或程序。
图形用户界面或GUI是包含图形对象,如:
窗口、图标、菜单和文本的用户界面。
以某种方式选择或激活这些对象,通常引起动作或发生变化。
最常见的激活方法是用鼠标或其它点击设备去控制屏幕上的鼠标指针的运动。
图4.1GUI界面设计
通过MATLAB里面GUI功能自己设计出的关于本次课程设计的GUI界面,在这个界面中有预览图像,图像平移,图像缩放三个选项以及四个数据填充空格,来填写关于图像平移的长度与宽度,以及缩放的比例。
4.2插入图像
单击GUI界面的预览图像按钮,就可以选择将自己想要进行平移或缩放的图片插入到这个程序里面去,并显示出来。
在这次课程设计当中将“lena.bmp”这张图片插入到所做的程序当中,如图所示。
图4.2预览的图片
插入的“lena.bmp”图片在MTALAB中所做的GUI图形用户界面中显示了出来。
4.3图像的平移变换
在所设计的GUI界面当中,首先设定所要平移的像素长度以及宽度,并且在设计当中用正负符号来表示图像的方向,设置完成之后,单击图片平移按钮,就会弹出窗口当中显示出两张图片。
通过左右两张的图片对比可以清楚的看到右边图片是经过平移处理之后的。
4.3.1图像右下方平移
图4.3图像右下方向移动
如图所示,在GUI界面中将参数设置成平移长度为100,平移宽度为100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向右下方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的对比结果。
4.3.2图像左下方平移
图4.4图像的左下方向移动
如图所示,在GUI界面中将参数设置成平移长度为-100,平移宽度为100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向左下方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比。
4.3.3图像左上方平移
图4.5图像向左上方向移动
如图所示,在GUI界面中将参数设置成平移长度为-100,平移宽度为-100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向左上方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比。
4.3.4图像右上平移
图4.6图像向右上方向移动
如图所示,在GUI界面中将参数设置成平移长度为100,平移宽度为-100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向右上方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比
4.4图像的缩放变换
在所设计的GUI界面当中,首先设定所要缩放的像素长度以及宽度比例系数,设置完成之后,单击双线性差值法缩放按钮,就会弹出窗口,在当中显示出两张图片。
通过左右两张的图片对比可以清楚的看到右边图片是经过缩放处理之后的,在长度宽度的比例上有所变化
4.4.1基于双线性插值法的图像缩放
图4.6双线性差值法的图像缩放
如图所示,在所设计的GUI界面中将参数设置成长度缩放比例系数为2,宽度缩放比例系数为3之后,单击双线性插值法按钮,在弹出来的窗口之中,明显可以看到右边的图片相比较左边的图片,在长度上是要比宽度上要放大了所设置的比例系数的,由于对应的系数为2倍3倍,所以可以清楚明了的看到缩放效果。
所以当设置为长宽系数形同时,缩放效果是不明显的。
4.4.2邻近插值法的图像缩放
图4.7邻近插值法的图像缩放
如图所示,在所设计的GUI界面中将参数设置成长度缩放比例系数为2,宽度缩放比例系数为3之后,单击邻近插值法按钮,在弹出来的窗口之中,明显可以看到右边的图片相比较左边的图片,在长度上是要比宽度上要放大了所设置的比例系数的,由于对应的系数为2倍3倍,所以可以清楚明了的看到缩放效果。
5心得体会
通过这次课程设计,使得我更加的掌握了在数字图像处理方面的知识,以及加强了我对数字图像处理这一门学科的兴趣与爱好。
此外还掌握了相关MATLAB的一些基本操作与应用,能够在以后的学习生活之中进行一些简单的设计。
虽然在这次设计实践过程之中,遇到了重重困难,但是在经过一次次的更正,一次次的修改之后,以及经过网络上多方面材料的查找与老师的悉心指导,终于能够最终的完成这次课程设计的题目要求。
两周的时间不算很长,但是在这两周的时间里面,我们却学习到了很多之前多不能学习到的东西。
在这次课程设计中不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
实验过程中,此次设计也让我明白了有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
参考文献
[1]章毓晋.《图像处理和分析教程》,人们邮电出版社,2009。
[2]龚声蓉.《数字图像处理与分析》,清华大学出版社,2006
[3]余成波.《数字图像处理及MATLAB实现》,重庆大学出版社,2003
[4]姚敏.《数字图像处理》,机械工业出版社,2006
[5]李显宏.《MATLAB7.x界面设计与编程技巧》电子工业出版社,2006
[6]KennethR.Castleman著,朱志刚等译,《数字图像处理》,电子工业出版社,2006
附录
1.MATLAB图像平移程序
N1=get(handles.cc,'String');
N2=get(handles.kk,'String');
Tx=str2double(N1);
Ty=str2double(N2);
[m,n]=size(I);
H=uint8(zeros(m+abs(Ty),n+abs(Tx)));
if(Tx>0&&Ty>0)
H(1+Ty:
m+Ty,1+Tx:
n+Tx)=I;
elseif(Tx<0&&Ty<0)
H(1:
m,1:
n)=I;
elseif(Tx<0&&Ty>0)
H(1+Ty:
m+Ty,1:
n)=I;
else
H(1:
m,1+Tx:
n+Tx)=I;
end
end
end
figure,subplot(1,2,1);
imshow(I);title('原图像');
subplot(1,2,2);
imshow(H);title('输出图像');
2.MATLAB图像双线性插值法图像缩放
I=imread('lena.bmp');
[rows,cols]=size(I);
N1=get(handles.chang,'String');
N2=get(handles.kuan,'String');
K1=str2double(N1);
K2=str2double(N2);
width=K1*rows;
height=K2*cols;
Out=uint8(zeros(width,height));
widthScale=rows/width;
heightScale=cols/height;
forx=2:
width-2
fory=2:
height-2
oldX=x*widthScale;
oldY=y*heightScale;
if(oldX/double(uint16(oldX))==1.0)&(oldY/double(uint16(oldY))==1.0)
Out(x,y)=I(int16(oldX),int16(oldY));
else
a=double(uint16(oldX));
b=double(uint16(oldY));
x11=double(I(a,b));
x12=double(I(a,b+1));
x21=double(I(a+1,b));
x22=double(I(a+1,b+1));
Out(x,y)=uint8((b+1-oldY)*((oldX-a)*x21+(a+1-oldX)*x11)+(oldY-b)*((oldX-a)*x22+(a+1-oldX)*x12));
end
end
end
figure,subplot(1,2,1);
imshow(I);title('原图像')
subplot(1,2,2);
imshow(Out);title('输出图像');
2.MATLAB图像最邻近差值法图像缩放
I=imread('lena.bmp');
[rows,cols]=size(I);
N1=get(handles.chang,'String');
N2=get(handles.kuan,'String');
K1=str2double(N1);
K2=str2double(N2);
width=K1*rows;
height=K2*cols;
im2=uint8(zeros(width,height));
widthScale=rows/width;
heightScale=cols/height;
forx=2:
width-2
fory=2:
height-2
oldX=x*widthScale;
oldY=y*heightScale;
if(oldX/double(uint16(oldX))==1.0)&(oldY/double(uint16(oldY))==1.0)
im2(x,y)=I(int16(oldX),int16(oldY));
else
a=double(round(oldX));
b=double(round(oldY));
im2(x,y)=I(a,b);
end
end
end
figure,subplot(1,2,1);
imshow(I);title('原图像')
subplot(1,2,2);
imshow(im2);title('输出图像')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 数字图像 处理
![提示](https://static.bdocx.com/images/bang_tan.gif)