MATLAB实现图像的平移缩放和旋转_第1页
MATLAB实现图像的平移缩放和旋转_第2页
MATLAB实现图像的平移缩放和旋转_第3页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字图像处理课 程 设 计题目图像的几何变换重建系(部)信息工程系班姓学级名号指导教师2013 年 12 月 16 日 至 12 月 27 日 共 2 周2013 年 12 月 27数字图像处理 课程设计任务书一、设计题目、内容及要求设计题目:图像的几何变换重建1、设计内容:能够读取和存储图像。实现图像的平移、缩放、旋转几何变换。分别采用最近邻插值和双线性插值技术进行图像重建。2、设计要求: 简易处理系统。能显示输入图像、输出图像。不允许直接调用 工具箱中的几何变换函数。程序代码要有注释说明,调用MATLAB使用范围,在设计说明书中要写清楚函数的功能和参数意义。完成设计说明书一份。二、设计原始

2、资料MATLAB 软件、原始图像。三、要求的设计成果(课程设计说明书、设计实物、图纸等)设计成果为课程设计说明书和程序源代码。每人提交电子版和纸质打印版的设计说明书各一份,电子版以“班级_学号”为名建立文件夹,其中存放电子版课程设计报告和程序源代码。以班为单位刻录光盘一张。四、进程安排第一周:周 1 布置设计任务,学生查阅相关资料。周 2 熟悉编程语言、确定设计方案。周 3-5 程序设计、编写代码、上机调试。1-2234五、主要参考资料余成波.数字图像处理及MATLAB. 北京 . MATLAB7.x. Kenneth R.Castleman指导教师(签名:教研室主任(签名:课程设计成绩评定表

3、出勤出勤天数情况缺勤天数出勤情况及设计过程表现)成课设答辩(30)绩说明书(20)评设计成果(30)定总成绩(100)提问(答辩)综合评定指导教师签名:年月日目 录引言4课程设计的目的错误!未定义书签。课程设计的任务错误!未定义书签。课程设计的要求错误!未定义书签。开发工具错误!未定义书签。 HYPERLINK l _TOC_250015 设计内容4 HYPERLINK l _TOC_250014 设计内容4 HYPERLINK l _TOC_250013 系统框图4设计方案5 HYPERLINK l _TOC_250012 功能模块的划分5 HYPERLINK l _TOC_250011 算

4、法描述5 HYPERLINK l _TOC_250010 实现主要功能的原理和方法8 HYPERLINK l _TOC_250009 最近邻域插值法8 HYPERLINK l _TOC_250008 双线性插值法8 HYPERLINK l _TOC_250007 功能模块的具体实现10 HYPERLINK l _TOC_250006 模块功能10 HYPERLINK l _TOC_250005 流程图11 HYPERLINK l _TOC_250004 程序清单及各模块的实现效果图11 HYPERLINK l _TOC_250003 系统仿真与调试21 HYPERLINK l _TOC_250

5、002 总结与体会22 HYPERLINK l _TOC_250001 参考文献22 HYPERLINK l _TOC_250000 附录231 引言1 引言 PAGE PAGE 42 设计内容设计内容我选取的是图像的几何变换,设计内容如下,能够读取和存储图像。实现图像的平移、缩放、旋转几何变换。(4)编写代码实现上述功能。系统框图图像几何处理系统平移变换缩放变换旋转变换双最双最双最线邻线邻性近性近插插插插值值值值缩缩旋旋放放转转存储存储存储存储图 2-1 系统框图处理后再存储。3 3 设计方案 PAGE PAGE 5功能模块的划分本次设计整体分为四大模块:原图、平移、缩放和旋转。其中缩放和旋

6、转又分别有双线性插值和最近邻插值两模块。算法描述x fx y fy 倍,从而获得一幅新的图像。如果fx=fy,即在x y fxfy例缩放会改变原始图象的像素间的相对位置,产生几何畸变。P0(x0,y0)P(x,y)P0(x0,y0)、P(x,y)之间的关系用矩阵形式可以表示为yxfx00 y其逆运算为 1fy0y0 (3-1)01 1 100 x fx x 01 y yy 00 fy(3-2)1 001 1即x x 0(3-3)yy 0fy 时,图像被缩到一半大小,此时缩小后图像中的(0,0)像素对应于原图像中的(0,0)像素;(0,1)像素对应于原图像中的(0,2)像素对应于原图像 中的(2

7、,0)像素,以此类推。图像缩小之后,因为承载的数据量小了,所以画布可 相应缩小。此时,只需在原图像基础上,每行隔一个像素取一点,每隔一行进行 PAGE PAGE 8则需要计算选择的行和列。如果 MN 大小的原图像 F(x,y)缩小为 kMkN 大小的新图像 I(x,y)时,则I(x,y)=F(int(cx),int(cy)(3-4)其中,c=1/k。由此公式可以构造出新图像。fxfy x y F(x,y)k1Mk2N I(x,y)时,则I(x,y)=F(int(c1x),int(c2y)(3-5)其中 c1=1/k1,c2=1/k2,由此公式可以构造出新图像。fx=fy=2(0,0)像素对应于

8、原图中的(0,0)像素对应于原图中的(0,0.5)像素,该像素不存在,可以近似为(0,0)也可以近似为(0,1);(0,2) 像素对应于原图像中的(0,1)像素;(1,0)像素对应于原图中的(0.5,0),它的像素值(0,0)或(1,0)像素;(2,0)(1,0)像素,依此类推。其实这是将原图像每行中的像素重复取值一遍,然后每行重复一次。k kk fx fy fxfy 0时,图像在xy 方向不按比例放大,此时x y 大的方法是将原图像的一个像素添到新图像的一个k k12的子块中去。为了提高几何变换后的图像质量,常采用线性插值法。该方法的原理是,当求出的分数地的像素灰度值进行线性插值。P (x

9、y000) 逆时针旋转 角后的对应点为PxyP (x y000)Pxy) 的坐标分别是:x rcosy0 rcos(3-6)0 x r ) r cos cos r sin sin x cos y sinyr)rsincosrcossin x0siny0cos(3-7)00写成矩阵表达式为xcossin0 x 0其逆运算为ysin1cos00y0 1 1 (3-8)x cossin0 x 0ysincos0 y0 (3-9)1001 1 利用上述方法进行图像旋转时需要注意如下两点:图像旋转之前,为了避免信息的丢失,一定要有坐标平移。以上所讨论的旋转是绕坐标轴原点(0,0)(a,b)逆时针旋转 度

10、,首先将原点平移到(a,b),即10aA01b01 然后旋转然后再平移回来cosB sin0sin cos 0000(3-11)10a C 01001综上所述,变换矩阵为T C B A。(3-12)实现主要功能的原理和方法最近邻域插值法I(i/b,j/a,k)I(i/b,j/a,k)取最近整数点用四舍五入。在许多情况下,最近邻插值的结果可以令人接受。最邻近点插值取插值点的4个邻点中距离最近的邻点灰度值作为该点的灰度值。设插值点(i,j)到周边4个邻点fk(i,j)(k 1,2,3,4)的距离为dk(k 1,2,3,4),则:g(i,j)fk(i,j),dlmind1,d2,d3,d4,l1,2

11、,3,4。最近邻点插值的一个隐含的假设条件是任一网格点p(x,y)的属性值都使用距3。当SURFER 的网格文件,可以应用,在搜索椭圆(SearchEllipse)设置一个值,对无数据区域赋予该网格文件里的XYZ XYZ 数据的数据点之双线性插值法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(,j)+(1-u)v f(i,j+1)+u(1-v)f(i+l,j)+uvf(i+,j+1), 其中f(i,j)表示源图像(i,j)处的的像素值,以此类推,这就是双线性插值法。如图3-1(0,0

12、)(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)。在同一行内根据待插值像素点与其前后的原图像像素点的位置距离进行加 PAGE PAGE 10原图像行越近的待插值行,原图像行的加权系数就越大。假设原始图像大小为size=mnm与n分别是原始图像的行数与列0),则目标图像的大小size=tntm。对于目标图像的某个像素点P(x,y)通过P*

13、1/tP( x1,y1),其中x1=x/t, y1=y/t,由于x1,y1都不是整数所以并不存在这样的点,这样可以找出与它相邻的四个点的灰度f1、f2、f3、f4,使用双线性插值算法就可以得到这个像素点P (x1,y1)的灰度,也就是像素点P(x,y)的灰度。一个完整的双线性插值算法可描述如下:(2)由新图像的某个像素(x,y)映射到原始图像(x,y)处。对x,y取整得到(xx,yy)并得到(xx,yy)(xx+1,yy)(xx,yy+1)和(xx+1,yy+1)的值。利用双线性插值得到像素点(x,y)(5)重复步骤(2)直到新图像的所有像素写完。图3-1双线性插值原理4 功能模块的具体实现模

14、块功能片处理按钮菜单的功能。主界面设计如下:图 4-1 主界面 PAGE PAGE 11流程图开始开始对图像进行平移、缩放或旋转处理完成,得到新图并储存结束图 4-2 流程图程序清单及各模块的实现效果图读入原图代码如下, img=imread(lena.bmp); subplot(2,3,1);imshow(img); title(原始图像);imread函数读入图像并通过imshow函数显示出来。运行结果如下, PAGE PAGE 12图 4-3 原始图像图像的平移代码如下,delta_x=str2double(inputdlg(请输入向右平移量 , INPUT scale factor,

15、1,-60);%负数为向左delta_y=str2double(inputdlg(请输入向下平移量 , INPUT scale factor, 1,-89);%负数为向上img=imread(lena.bmp); %这里 v 为原图像的高度,u 为原图像的宽度v u=size(img);%y为变换后图像高度,x 为变换后图像宽度imgn=zeros(v+abs(delta_y),u+abs(delta_x); rot=1 0 0;0 1 0;delta_y delta_x 1; inv_rot=inv(rot);pix1=1 1 1*rot;%pix1(1),pix1(2)y,xpix4=v

16、u 1*rot;%pix4(1),pix4(2)y,x%向右下方移动if delta_x=0 & delta_y=0 for y=pix1(1):pix4(1)for x=pix1(2):pix4(2) pix=y x 1*inv_rot;if pix(1)=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=u imgn(y,x)=img(round(pix(1),round(pix(2);endendendend%向左下方移动if delta_x=0 PAGE PAGE 13for y=pix1(1):pix4(1)for x=pix1(2):pix4(2) pix=

17、y x 1*inv_rot;if pix(1)=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=u imgn(y,x-delta_x)=img(round(pix(1),round(pix(2);endendendend%向左上方移动if delta_x0 & delta_y=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=0 & delta_y=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=1 & pix(2)=1 & pix(1) = h & pix(2) =0.5 & pix(W)=0.5 & pix(H)=

18、v & pix(W)=0 & delta_y=0 for y=pix1(1):pix4(1)for x=pix1(2):pix4(2) pix=y x 1*inv_rot;if pix(1)=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=u imgn(y,x)=img(round(pix(1),round(pix(2);endendendend%向左下方移动if delta_x=0 for y=pix1(1):pix4(1)for x=pix1(2):pix4(2) pix=y x 1*inv_rot;if pix(1)=0.5 & pix(2)=0.5 & pix

19、(1)=v & pix(2)=u imgn(y,x-delta_x)=img(round(pix(1),round(pix(2);endendendend%向左上方移动if delta_x0 & delta_y=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=0 & delta_y=0.5 & pix(2)=0.5 & pix(1)=v & pix(2)=1 & pix(2)=1 & pix(1) = h & pix(2) =0.5 & pix(W)=0.5 & pix(H)=v & pix(W)=uimgn(y+delta_y,x+delta_x)=img(roun

20、d(pix(H),round(pix(W);endendendsubplot(2,3,3);imshow(uint8(imgn);title(最近邻插值旋转);imwrite(uint8(imgn),最近邻插值旋转.bmp,bmp) ; function pushbutton5_Callback(hObject, eventdata, handles)% 用 双 线 性 插 值 法 实 现 图 像 缩 放 I=imread(lena.bmp); %读入原图像rows,cols=size(I);K1=str2double(inputdlg(请输入列缩放倍数,INPUTscalefactor,1,

21、0.5);%行默认变为原来的 0.5 倍K2=str2double(inputdlg(请输入行缩放倍数,INPUTscalefactor,1,1.5);%1.5 width = K1 * rows;height = K2 * cols;Out = uint8(zeros(width,height);%widthScale = rows/width;heightScale = cols/height;for x = 6:width - 6% 6 是为了防止矩阵超出边界溢出for y = 6:height - 6oldX = x * widthScale;% oldX,oldY 为原坐标,x,y为

22、新坐标oldY = y * heightScale;if (oldX/double(uint16(oldX) = 1.0) & (oldY/double(uint16(oldY) = 1.0)Out(x,y) = I(int16(oldX),int16(oldY);%elsea = double(uint16(oldX); b = double(uint16(oldY);x11 = double(I(a,b);% x11赋值为 I(a,b)x12 = double(I(a,b+1);% x12 赋值为 I(a,b+1)x21 = double(I(a+1,b);% x21 赋值为 I(a+1,b)x22 = double(I(a+1,b+1);% x22 赋值为 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) );% 用双线性插值计算公式计算endendendsubplot(2,3,5);imshow(Out);title(双线性插值缩放);imwrite(uint8(imgn),双线性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论