版本: MATLAB R2019a

目录

  • (一)图像平移
  • (二)图像旋转
    • 1、图像尺寸不变
    • 2、图像信息不丢失
  • (三)图像缩放
  • (四)图像裁剪

(一)图像平移

使用MATLAB自带函数 translate(SE, [y x])
功能:
在结构元素SE上进行y和x方向的位移 正数对应右移和下移

%图像平移
A=imread('1.jpg');
se=translate(strel(1),[50 50]);
%向右向下平移50,50像素坐标
B=imdilate(A,se);%形态学膨胀
figure;
subplot(1,2,1),subimage(A);
title('原图像')
subplot(1,2,2),subimage(B);
title('图像平移')

仿真结果:

(二)图像旋转

1、图像尺寸不变

使用MATLAB自带函数 imrotate(img,30);
功能:
将图像img逆时针旋转30°

注:为什么需要插值?
答:MATLAB在进行图像操作时,是将其存放在数组中,而数组坐标必须为整数,若对图像进行旋转、缩放等操作,计算得到的坐标不一定为整数,这时候就需要进行插值。MATLAB常用插值方法有三种:
(1)最近邻插值 ‘nearest’
(2)双线性插值 ‘bilinear’
(3)三次卷积插值 ‘bicubic’

A=imread('1.jpg');
B=imrotate(A,30);                 %旋转30°
C=imrotate(A,30,'crop');       %旋转30°,并剪切图像,使得到的图像和原图像大小一致
%若不说明插值方法,默认为最近邻插值
D=imrotate(A,30,'bilinear','crop');
%双线性插值法旋转30°,并剪切图像,使得到的图像和原图像大小一致figure;
subplot(2,2,1),imshow(A);
title('原图像')
subplot(2,2,2),imshow(B);
title('图像旋转(保留全部图像信息)')
subplot(2,2,3),imshow(C);
title('图像旋转(大小不变)')
subplot(2,2,4),imshow(D);
title('图像旋转(双线性插值)')

仿真结果:

2、图像信息不丢失

在进行图像旋转时,不对图像进行缩放,但仍想保留全部图像信息。需要在旋转之后,计算所需要的背景尺寸,具体程序如下:

% 读入图片
A = imread('1.jpg');
% 求出旋转矩阵
theta = 30 / 180 * pi;
R = [cos(theta), -sin(theta); sin(theta), cos(theta)]';
%欧拉角旋转矩阵公式
%利用size函数读取原始图像A尺寸
sizeA = size(A);
length = sizeA(1);
width = sizeA(2);
h = sizeA(3);
c1 = [length; width] / 2;% 计算所需背景尺寸
length2 = floor(width*sin(a)+length*cos(a))+1;
%floor 向上取整函数,保证图像信息完整
width2 = floor(width*cos(a)+length*sin(a))+1;
c2 = [length2; width2] / 2;
% 初始化背景,将旋转后的图像坐标赋给该背景
B = uint8(ones(length2, width2, 3)*128);
for k = 1:hfor i = 1:length2for j = 1:width2p = [i; j];pp = (R*(p-c2)+c1);mn = floor(pp);ab = pp - mn;a = ab(1);b = ab(2);m = mn(1);n = mn(2);% 线性插值方法if (pp(1) >= 2 && pp(1) <= length-1 && pp(2) >= 2 && pp(2) <= width-1)B(i, j, k) = (1-a)*(1-b)*A(m, n, k) + a*(1-b)*A(m+1, n, k)...+(1-a)*b*A(m, n, k)+a*b*A(m, n, k);endendend
end
figure;
imshow(A);
title('原图像')
figure;
imshow(B);
title('图像旋转(扩大背景)')

仿真结果:

(三)图像缩放

使用MATLAB自带函数 imresize(img,a,‘method’)
功能:
对图像img进行系数为a的缩放。

A = imread('1.jpg');
a = 2;
aa = 0.5;
B=imresize(A,a,'nearest');
C=imresize(A,aa,'nearest');
figure;
imshow(A);
title('原图像')
figure;
imshow(B);
title('放大2倍图像')
figure;
imshow(C);
title('放大0.5倍图像')

仿真结果:

(四)图像裁剪

使用MATLAB自带函数 imcrop(img,[x y height length])
功能:在原始图像img 坐标位置(x,y)开始,向下向右进行裁剪

A=imread('1.jpg');  %读入图像
rect = [20 20 150 150];
B=imcrop(A,rect);              %进行图像剪切
subplot(121),imshow(A);
title('原图像')
rectangle('Position',rect,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
subplot(122),imshow(B);
title('裁剪图像')

“每天给自己一个希望,试着不为明天而烦恼,不为昨天而叹息,只为今天更美好。”加油!

MATLAB图像平移、旋转、缩放、裁剪相关推荐

  1. 2020.6.21P72_OpenCV_几何变换_图像平移_缩放_旋转

    描述: //2020.6.21P72_OpenCV_图像平移_缩放_旋转 •完成一张图像的几何变换需要两个独立的算法.首先需要一个算法实现空间坐标变换,用它描述每个像素如何从初始位置移动到终止位置:其 ...

  2. Unity 触屏手势控制Camera平移旋转缩放

    Unity 触屏手势控制Camera平移旋转缩放 实现思路 单点触屏,位移增量控制相机平移: 两点触屏,两点位移控制相机前后移动(缩放):两点中一点不位移控制相机绕点旋转: 实现需要的API Touc ...

  3. opencv 图像平移、缩放、旋转、翻转 图像仿射变换

    图像几何变换 图像几何变换从原理上看主要包括两种:基于2x3矩阵的仿射变换(平移.缩放.旋转.翻转).基于3x3矩阵的透视变换. 图像平移 opencv实现图像平移 实现图像平移,我们需要定义下面这样 ...

  4. 三维空间中的几何变换-平移旋转缩放

    前言 前段时间由于项目需要,深入学习了下图形几何变换,主要是绕任意轴旋转部分(其他的已有一定基础),现记录学习笔记. 文章内容部分引用并参考了下面的博客: http://netclass.csu.ed ...

  5. Unity矩阵平移旋转缩放Matrix4x4

    Unity中的矩阵(Matrix4x4) 最近在研究帧同步定点数物理系统中需要自定义定点数矩阵,所以在这里分享下基础的矩阵案例旋转.平移.缩放.(注意这里本文中的transform组件式基于unity ...

  6. 三维坐标 偏转_三维坐标变换原理-平移, 旋转, 缩放

    给定一个二维点(x, y),那么形如(kx, ky, k)的所有三元组就都是等价的,它们就是这个点的齐次坐标(homogeneous).齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示,是指 ...

  7. 三维坐标要建一个4*4的矩阵?平移 旋转 缩放

    移植不知道三维物体的旋转平移缩放和矩阵的关系.找到这篇文章借鉴一下. 转自:https://blog.csdn.net/ALLENJIAO/article/details/80348362 怎么平移一 ...

  8. Cesium变换3DTiles的位置(平移旋转缩放)

    function add3DTilesetDataTrans(url) {             //viewer1.scene.globe.depthTestAgainstTerrain = tr ...

  9. OpenGL中的平移旋转缩放

    1.opengl中缩放使用的函数是glScalef 其原型为void glScalef(GLfloat  x,  GLfloat  y,  GLfloat  z); 该函数表示模型在各轴上进行扩大和缩 ...

最新文章

  1. 什么是TensorFlow?
  2. 2.3.7 操作系统之管程和java中实现管程的机制
  3. 简单分析EnableAutoConfiguration
  4. 线程池的开源实现(mariadb和percona版本)
  5. 什么是SSID/ESSID/BSSID
  6. rocketmq存储结构_阿里专家分享内部绝密RocketMQ核心原理与最佳实践笔记
  7. 修复版ZFAKA发卡系统源码 自适应PC+手机端
  8. C++ C++11新特性--右值引用
  9. 【软件工程】图书馆自习室及座位管理系统的分析与设计
  10. C++ 合并两个有序链表
  11. 判断质数的所有方法详解(C语言)
  12. 前端三大主流框架的区别
  13. 如何将已有项目导入SVN
  14. R语言分类算法之距离判别(Distance Discrimination)
  15. Linux多个小压缩文件合并一个压缩文件命令
  16. SDK manger中只有几个配置????
  17. web前端程序员到底值多少钱?
  18. 机械祭天法力无边:C++primer学习(第一章及课后习题)
  19. 上午写了一段代码,下午就被开除了。。。
  20. matlab 工具箱 径向基,径向基(matlab工具箱)

热门文章

  1. Python mechanize 的一点说明
  2. 深度学习方面的论文整理
  3. 函数最值题目及答案_有关函数的极值与导数的测试题及答案
  4. 数据、数据元素、数据项、数据对象的介绍和理解
  5. matlab bsxfun memory,matlab – BSXFUN关于关系操作的内存效率
  6. 差序格局与关系取向社会
  7. 计算机视觉——SIFT特征提取与检索
  8. Drupal XSS漏洞(CVE-2019-6341)
  9. 游戏性能优化指南:如何将HTML5性能发挥到极致
  10. pythonweb全栈开发_Python web全栈学习路线