图像旋转的原理与实现

图像旋转的原理与实现

一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。设点逆时针旋转角后的对应点为。那么,旋转前后点的坐标分别是:

                          (3-6)

  (3-7)

写成矩阵表达式为

            (3-8)

其逆运算为

            (3-9)

利用上述方法进行图像旋转时需要注意如下两点:

(1)图像旋转之前,为了避免信息的丢失,一定要有坐标平移。

(2)图像旋转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。

以上所讨论的旋转是绕坐标轴原点(0,0)进行的。如果图像旋转是绕一个指定点(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。如将一幅图像绕点(a,b)逆时针旋转度,首先将原点平移到(a,b),即

                        (3-10)

然后旋转

                 (3-11)

然后再平移回来

                        (3-12)

综上所述,变换矩阵为

代码:

B=imread('image1.bmp');
%读取原图像
[m,n]=size(B); %获取原图尺寸w
%参数设置
theta = pi/4;  %旋转角度
a = sin(theta);
b = cos(theta);
T = [cos(theta),sin(theta),;    %旋转矩阵-sin(theta),cos(theta)];%建立存储空间
row=m+round((m)/2);
col=n+round((n)/2);
rotateima = zeros(row, col);  %存储旋转后图像的矩阵%图像旋转
for i=1:m                                      for j=1:nx=ceil(abs((i-round(m/2))*b-(j-round(n/2))*a+round(row/2)));  %坐标平移至中心y=ceil(abs((i-round(m/2))*a+(j-round(n/2))*b+round(col/2)));  %坐标平移至中心rotateima(x,y)=B(i,j);                   %未插值的图像end
end
nrotateima = uint8(rotateima);
imshow(nrotateima);
title('未插值的图像')%图像插值(近邻插值法)
for i=1:row   for j=2:col-1      if(rotateima(i,j) == 0 && rotateima(i,j-1) ~= 0 && rotateima(i,j+1) ~= 0 )      rotateima(i,j) =rotateima(i,j-1) ;     endend
end%图像显示
figure(1);
imshow(B)
title('原始图像');
% figure(2);
% imshow(nrotateima);
% title('未插值的图像');
figure(3);
imshow(rotateima/256);
imwrite(rotateima/256, '旋转后图像.jpg', 'jpg');
title('旋转图');

原文链接:https://www.cnblogs.com/hustlx/p/5245226.html

图像旋转的原理与实现相关推荐

  1. 图像旋转的原理,实现与优化

    文章目录 图像旋转的原理 图像旋转的实现 最近邻插值 双线性插值 双线性的优化 图像旋转的原理 图像旋转的原理其实很简单,为了简化公式的推导,这里我们假设绕原点 ( 0 , 0 ) (0,0) (0, ...

  2. 经验 | OpenCV图像旋转的原理与技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的 ...

  3. OpenCV图像旋转的原理与技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的第一 ...

  4. 基于双线性插值的图像旋转原理及MATLAB实现(非自带函数)

    目录 1.图像旋转的原理 1.1.旋转矩阵 1.2.双线性插值 1.3.像素点匹配 2.实现效果与说明 1.图像旋转的原理 1.1.旋转矩阵 旋转一幅图像(假设这幅图像大小是矩形的),当然应该从像素点 ...

  5. 小白学习图像处理3——图像旋转原理

    文章目录 一.图像旋转的原理 二.使用matlab实现 1.思路 2.实现代码 三.优化 1.思路 2.代码实现 3.使用双线性插值 四.matlab函数实现图像旋转 1.imrotate函数 2.i ...

  6. 【数字图像处理】MATLAB实现图像旋转

    前言 上节课学习了实现图像旋转的原理,下课后用matlab实现了一下图像旋转的功能,这里做个记录. 图像旋转原理 图像旋转的本质利用的是向量的旋转. 矩阵乘法的实质是进行线性变换,因此对一个向量进行旋 ...

  7. 学习OpenCV3——图像旋转算法实现

    图像旋转是非常常见的图像变换,通常应用于图像矫正,在OpenCV可以使用密集仿射变换函数cv::warpAffine()实现图像旋转.为了理解图像旋转的原理,本文实现了一个图像旋转算法. 图像旋转是指 ...

  8. 二维图像旋转的坐标公式推导

    二维图像旋转后的坐标公式推导: 综上,图像顺时针和逆时针旋转的矩阵分别为: 对于此处红色字体的理解部分,有误解,图像没有翻转. 这个坐标转换只是让图像每个位置在某一坐标系的表达,转换到另一个坐标系上的 ...

  9. 图像的仿射变换原理及c++实现(旋转,平移,缩放,偏移,组合变换)

    github地址:https://github.com/2209520576/Image-Processing-Algorithm 一.写在前面 几何空间变换是图像处理中的最基础的算法,主要包括图像的 ...

最新文章

  1. 互联网大脑的发育与元宇宙的兴起
  2. 进程间通信 —— 命名管道
  3. Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
  4. VUE+WebPack游戏开发:神庙逃亡的游戏设计
  5. css3实现流星坠落效果
  6. ffmpeg最新源代码(定期更新)
  7. 手把手教你用ECharts画饼图和环形图
  8. python条形图的间距_Matplotlib有间隙条形图
  9. 预演:使用 TensorFlow 进行深度学习
  10. 【ElasticSearch】ES分页查询超过10000限制解决
  11. 实验吧 因缺思汀的绕过 By Assassin(with rollup统计)
  12. APS Interview - Operating System
  13. android平板电脑忘记密码怎么解锁,平板密码忘了怎么解锁
  14. python库-collections模块Counter类
  15. 经典Hbase面试7题(附答案)
  16. 去法国,买哪些伴手礼既有面子又不破费
  17. Java中使用IE Proxy代理的方法
  18. 2022-9 做题时查漏补缺QVQ
  19. Mac下Android的Eclipse开发环境的搭建
  20. 23种设计模式之Java实现

热门文章

  1. ubuntu20.04下安装Kdevelop并实现图像ORB特征匹配
  2. 倩女幽魂7月20日服务器维护,7月20日服务器例行维护公告(已完成)
  3. 终于搞清楚开漏输出和推挽输出这个鬼东西
  4. N沟道和P沟道开漏输出
  5. osgEarth添加线特征
  6. 一年级语文学习资料17.12.20
  7. webapi 接口返回生成中国式 复杂表格,字节数据
  8. 0808 html基础
  9. IE浏览器内存泄露检测工具
  10. 罗兰经典合成器合集-Roland Cloud Bundle NO INSTALL WiN(免安装版)