matlab图像旋转..docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
matlab图像旋转.

=摘要=图像处理老师的课很抽像,很会跳....刚讲了一点RBG转灰度图,就马上进军图像的几何变换了,同时也带来了一个新的实验(作業):图像的旋转.要求:旋转弧度: 0radianpi/2 (顺时针旋转).对于我这个好学生来说...当然掩盖不了心中的好奇心----图像旋转是怎么实现的?于是经过一定的探索(主要是matlab的用法)...终于实现了这个旋转:)本文就是关于这个探索过程的一点文字记录啦.=预览一下=matlab有一个图像处理工具(IPT),里面已经有一个图像旋转算法的实现了...函数名:imrotate(源图像,旋转角度)...这里将给出:源图像,IPT版本处理过的旋转后图像,我自己的算法处理过的旋转图像:==原图像====IPT(imrotate)实现旋转====我自己的旋转函数結果====说明==上面的旋转对于玩过图像处理PS的人来说是不是太简单了?在PS里面或者其他图像处理工具里面对于图像的旋转是极简单的...一点就是了:)上面的旋转在生活中经常看到...你把一张生活照旋转一下就感觉到了哈.=什么是图像的旋转=图像的旋转是图像几何变换的一种...看到上面预览的图就能知道...旋转前后的图像的像素的RGB都是没有改变的,改变的只是每一个像素的所在位置....这个就是旋转的本质:把原图像像素从原点(x,y)放到目标位置点上(x,y)..这个(x,y)到(x,y)的转换是经过旋转计算而来的...那么这个图像处理就是旋转处理(几何变换).再看看上面的图,还真的发现只是图像的像素点的位置改变了,图像本身的彩色信息并没有改动什么.=怎么SHOW旋转后的图像==图像是怎么显示的=图像的显示都是基于矩阵像素来显示的...上面每一张图像的图像信息其实是一个RGB矩阵来的.所以必须把旋转后的图像放到一个像素矩阵中才能显示这个旋转后的图像.设一张图像的大小是col*row的.那么以这个图像对角线为直径的圆就能够包含这个图像经旋转后的图像..在这里因为图像的显示是矩阵式的,所以这里以图像对角线为边长构造一个正方形来保存旋转后的图像.从上面旋转后的图像可以看出效果啦,旋转后的图像就包含在这个正方形的矩阵中.=计算旋转图像所需要的正方形=因为图像是col*row的,所以这个正方形的边长 new_img_size = (col^2+row^2)^0.5;这样使用matlab就可以生成一个存储最终图像的rgb矩阵了:[cpp]?view plaincopyimg_rotated?=?uint8(zeros(new_img_size?,?new_img_size?,?3);?//%一个像素由RGB三个分量表现.?=怎么旋转?=现在来到正题了,上面已经把旋转的原理给讲清楚了...本质就是找到原点(x,y)的新位置(x,y),然后把原点的像素复制到目标点上就行了...上面也提到了一点:旧坐标到新坐的变的是旋转而来的...下面来体现一下旋转的原因:设一个原点P,P的坐标是:(x,y),这里的x是列分量,y是行分量.那么P点离图像左上角的距离是:r=(x^2+y^2)^0.5; 同时p到(1,1)点的连线与列方向有一个夹角:a此时r,x,y的关系可以进一步表示成:[cpp]?view plaincopyx?=??r*cos(a);??y?=??r*sin(a);?? 到了这里可以知道(x,y)本身与旋转角度有一定的关系了,....下面就将p点绕(1,1)这点顺时针旋转b角度...得到p的新位置(x,y)..由r,x,y的关系可以得到r,x,y的关系如下:[cpp]?view plaincopyx?=?r*cos(a+b);??y?=?r*sin(a+b); 进一步化简:[cpp]?view plaincopyx?=?r*cos(a)*cos(b)?-?r*sin(a)*sin(b);??y?=?r*sin(a)*cos(b)?+?r*cos(a)*sin(b);?? 然后再结合r,x,y的关系得到x,y,x,y的关系如下:[cpp]?view plaincopyx?=?x*cos(b)?-?y*sin(b);??y?=?y*cos(b)?+?x*sin(b);于是上面提到的点旋转位置关系就出来了....即(x,y)经过顺时针旋转b角度后可以得到(x,y)..这个转换公式就是上面的线性方程..写成matlab的方式就是如下啦:[cpp]?view plaincopy[x,y]?=?[cos(b)?-sin(b);sin(b)?cos(b)]*[x,y];??//%这里的x不是x的转置哦.? 好了,到此为止,我们有了旋转公式了...下面就可以利用这个公式对原图的每一个像素点(x,y)计算其旋转后的位置(x,y)了,然后就是复制图像的像素点了(简单不?)..

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档