今天学习了用Matlab实现对图像的基本操作。在Matlab中,图像是按照二维矩阵的形式表示的。所以对图像的操作就是对矩阵的操作。

对图像进行缩放、平移、旋转,都可以转化为矩阵的运算。 
关于变换矩阵的构造,请参考: 
《 [gym 101047C Robotics Competition] 矩阵快速幂求解点旋转平移N次之后的位置》 
参考原图: 

1. 图像平移

  1. init = imread('Fig3.tif'); % 读取图像
  2. [R, C] = size(init); % 获取图像大小
  3. res = zeros(R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
  4. delX = 50; % 平移量X
  5. delY = 50; % 平移量Y
  6. tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵
  7. for i = 1 : R
  8. for j = 1 : C
  9. temp = [i; j; 1];
  10. temp = tras * temp; % 矩阵乘法
  11. x = temp(1, 1);
  12. y = temp(2, 1);
  13. % 变换后的位置判断是否越界
  14. if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
  15. res(x, y) = init(i, j);
  16. end
  17. end
  18. end;
  19. imshow(uint8(res)); % 显示图像

2. 图像旋转

  1. init = imread('Fig3.tif'); % 读取图像
  2. [R, C] = size(init); % 获取图像大小
  3. res = zeros( R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
  4. alfa = -15 * 3.1415926 / 180.0; % 旋转角度
  5. tras = [cos(alfa) -sin(alfa) 0; sin(alfa) cos(alfa) 0; 0 0 1]; % 旋转的变换矩阵
  6. for i = 1 : R
  7. for j = 1 : C
  8. temp = [i; j; 1];
  9. temp = tras * temp;% 矩阵乘法
  10. x = uint16(temp(1, 1));
  11. y = uint16(temp(2, 1));
  12. % 变换后的位置判断是否越界
  13. if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
  14. res(i, j) = init(x, y);
  15. end
  16. end
  17. end;
  18. imshow(uint8(res)); % 显示图像

3. 图像缩放

  1. init = imread('Fig3.tif'); % 读取图像
  2. [R, C] = size(init); % 获取图像大小
  3. timesX = 3; % X轴缩放量
  4. timesY = 3; % Y轴缩放量
  5. res = zeros(timesX * R, timesY * C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
  6. tras = [1/timesX 0 0; 0 1/timesY 0; 0 0 1]; % 缩放的变换矩阵
  7. for i = 1 : timesX * R
  8. for j = 1 : timesY * C
  9. temp = [i; j; 1];
  10. temp = tras * temp; % 矩阵乘法
  11. x = uint8(temp(1, 1));
  12. y = uint8(temp(2, 1));
  13. % 变换后的位置判断是否越界
  14. if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
  15. res(i, j) = init(x, y);
  16. end
  17. end
  18. end;
  19. imshow(uint8(res)); % 显示图像

4. 图像镜像(水平)

  1. init = imread('Fig3.tif');
  2. [R, C] = size(init);
  3. res = zeros(R, C);
  4. for i = 1 : R
  5. for j = 1 : C
  6. x = i;
  7. y = C - j + 1;
  8. res(x, y) = init(i, j);
  9. end
  10. end
  11. imshow(uint8(res));

Matlab 图像平移、旋转、缩放、镜像的更多相关文章

  1. osg矩阵变换节点-----平移旋转缩放

    osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见 ...

  2. osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...

  3. webgl学习笔记三-平移旋转缩放

    写在前面 建议先阅读下前面我的两篇文章. webgl学习笔记一-绘图单点 webgl学习笔记二-绘图多点 平移 1.关键点说明 顶点着色器需要加上 uniform vec4 u_Translation ...

  4. 【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)

    这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图. 值得学习的: 定时器事件ID检查: 在定时器事件中检查定时器id是比较好的实践. QPainter抗锯齿: We call QPai ...

  5. matlab 图像平移操作

    目标:对原图I进行[80,50]的偏移操作得到图B. 首先读入图像,以matlab自带的pout.tif为例. strel是创建形态学结构元素的. translate函数在原结构上进行[80,50]的 ...

  6. 【安卓】自己定义基于onDraw的随意动画(不不过平移/旋转/缩放/alpha)、!

    思路: 1.基于时间的显示映射.如:给定度数,显示圆弧,加上时序,就可以有圆弧动画的效果 2.给定时序. 用于驱动动画的一帧帧绘制 方案一.基于ObjectAnimator.动画运作时会调用degre ...

  7. 【Qt官方例程学习笔记】Raster Window Example(画笔的平移/旋转/缩放应用)

    这个例子显示了如何使用QPainter渲染一个简单的QWindow. 值得学习的内容 <QtGui>头文件 #include <QtGui>就可以使用Qt GUI模块中的所有类 ...

  8. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...

  9. OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...

随机推荐

  1. 【Linux】修改CentOS7启动方式

    ## 查看当前系统的默认启动方式: systemctl get-default ## 查看如下文件 cat /etc/inittab 可以看到 此文件中提示了如何进行修改默认的启动方式 ## 命令行启 ...

  2. 【JUC】1.线程

    先复习一下线程的东西: Java线程的内存模型 主内存与工作内存 Java内存模型主要定义了程序中各个变量的访问规则 所有的变量都在主内存,Java堆(线程共享) 每条线程都有自己的工作内存,虚拟机栈 ...

  3. java - day015 - 手写双向链表, 异常(续), IO(输入输出)

    类的内存分配 加载到方法区 对象在堆内存 局部变量在栈内存 判断真实类型,在方法区加载的类 对象.getClass(); 类名.class; 手写双向链表 package day1501_手写双向链表 ...

  4. 修改虚拟机磁盘uuid

    cd 到这个目录: C:\Program Files\Oracle\VirtualBox> ####  sethduuid 后为 路径+文件名. VBoxManage internalcomma ...

  5. DOORS 和Reqtify — 需求管理和需求追溯工具

    IBM Rational DOORS 可实现对整个产品的全生命周期需求管理,覆盖从需求.到设计以及测试阶段.是一款具有广泛使用的企业级专业需求管理工具.DOORS 可以将项目开发过程中产生的各级需求和 ...

  6. k8s的paas平台

    高可靠设计,Etcd 集群,Kubernetes 三主节点,保证集群的高可用性. 基于 GlusterFS /nfs集群,在生产环境和非生产环境下提供存储卷服务. Flannel+VXLAN,提供可靠 ...

  7. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  8. 关于前端 jQuery 面试的知识点

    参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...

  9. ElementUI 之 DatePicker 日期限制范围 disabledDate

    需求: 时间选择器,只能选择 2000 年 - 至今的年份. <el-date-picker v-model="year" type="year" :pi ...

  10. YARN构建--解决cypress下载慢问题

      背景 注意:      此方案仅适合已经自行搭建私有仓库的用户使用      如非必要,尽可能使用软件开发云或其他服务提供的镜像站,避免此类特殊处理(会导致仓库维护成本增加) 场景描述 YARN构 ...