图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值
作为一个强大的科学计算软件,MATLAB广泛运用于较多领域,以其简单的编程风格著称。这篇文章便通过matlab语言来讲述如何进行图像的各种几何变换。
图像几何变换又称为图像空间变换,它是将一幅图像中的坐标位置,映射到另一幅图像中的新坐标位置。几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。
接下来就是图像算法的第二讲,主要涉及的知识点有:
1. 几何变换:平移、镜像、转置、缩放、旋转;
2. 插值算法
图像平移:imtransform(),maketform()
%平移就是按照指定的平移量进行 【水平】or【垂直】 的移动。
x1=x0+Tx
y1=y0+Ty
%平移矩阵:
A =
1 0 0
0 1 0
Tx Ty 1
图像平移的表达式:B=imtransform(Img , TFORM , method);
%imtransform函数用于完成一般的二维空间变换
B=imtransform(Img , TFORM , method); %Img- 要进行几何变换的图片
%TFORM- 指具体的变换类型
%method- 允许为imtransform函数选择的插值方法,以下三种可填:
% 'bicubic' 双三次插值
% 'bilinear' 双线性插值
% 'nearest' 最近邻插值
%maketform函数的作用:为获得 TFORM 结构的方法。
T=maketform(transformtype, Matrix );
%参数transformtype指定了变换的类型,例如常见的‘affine’二维仿射变换(平移、旋转、比例、拉伸等)
%例子:
function Img_out = imMove(Img, Tx, Ty ); %平移变换Img=imread('C:\Users\cat.jpg'); Tx=100; %Tx- 水平方向平移量 Ty=800; %Ty- 竖直方向平移量 tform =maketform('affine',[1 0 0 ; 0 1 0 ; Tx Ty 1 ]); Img_out = imtransform(Img,tform,'XData',[1 size(Img,2)],'YData',[1, size(Img,1)]);%图像平移figure; subplot(1,2,1);imshow(Img);title('原图'); subplot(1,2,2);imshow(Img_out);title('平移后的图像'); end
显示出平移后的图像,平移过的地方变成了黑色的。
图像镜像:imtransform(),maketform()
%平移就是按照指定的平移量进行 【水平】or【垂直】 的移动。
图像镜像分为两类:水平镜像,竖直镜像。
%水平镜像矩阵:
B=
-1 0 0
0 1 0
Width 0 1
%竖直镜像矩阵:
C =
1 0 0
0 -1 0
0 Height 1
%举例:
Img=imread('C:\Users\people.jpg');[Height, Width, dim ]=size(Img);tform_B = maketform('affine',[-1 0 0 ; 0 1 0 ; Width 0 1 ]); %定义水平镜像变换矩阵Img_B = imtransform(Img,tform,'nearest');tform_C=maketform('affine',[1 0 0;0 -1 0;0 Height 1]); %定义竖直镜像变换矩阵Img_C = imtransform(Img,tform_C,'nearest');figure;subplot(1,3,1);imshow(Img);title('原图');subplot(1,3,2);imshow(Img_B);title('水平镜像');subplot(1,3,3);imshow(Img_C);title('竖直镜像');
图像转置:imtransform(),maketform()
%平移就是按照指定的平移量进行 【水平】or【垂直】 的移动。
%转置变换矩阵:
D =
0 1 0
1 0 0
0 0 1
%图像转置
Img=imread('C:\Users\people.jpg');tform_D = maketform('affine',[0 1 0 ; 1 0 0 ; 0 0 1 ]); %定义转置变换矩阵Img_D = imtransform(Img,tform_D,'nearest');figure;subplot(1,2,1);imshow(Img);title('原图');subplot(1,2,2);imshow(Img_D);title('图像转置');
图像缩放:imresize()
%图像缩放是指图像按照比率进行放大或者缩小
%缩放变换矩阵:
E =
Sx 0 0
1 Sy 0
0 0 1
%图像缩放
Img=imread('C:\Users\people.jpg');Img_E=imresize(Img, 1.5, 'nearest'); %图像扩大 1.5 倍figure;imshow(Img);title('原图');figure;imshow(Img_E);title('图像缩放');
图像旋转:imrotate()
%旋转一般是将图像围绕某一点旋转一定的角度。旋转也会改变图像的大小。
%旋转变换矩阵:
F =
cos(θ) -sin(θ) 0
sin(θ) cos(θ) 0
0 0 1
%围绕中心点的图像旋转
Img = imread('C:\Users\people.jpg');Img_F = imrotate(Img,30, 'nearest', 'crop'); %最近邻插值法逆旋转30°,并剪切图像;subplot(1,2,1),imshow(Img);title('原图');subplot(1,2,2),imshow(Img_F);title('逆时针旋转30度');
插值: 'bilinear' , 'nearest'
之前说到的method:在这里主要介绍一下
- 最近邻插值算法 % 'nearest' 最近邻插值
- 双线性插值算法 % 'bilinear' 双线性插值
%imtransform函数用于完成一般的二维空间变换
B=imtransform(Img , TFORM , method); %Img- 要进行几何变换的图片
%TFORM- 指具体的变换类型
%method- 允许为imtransform函数选择的插值方法,以下三种可填:
% 'bicubic' 双三次插值
% 'bilinear' 双线性插值
% 'nearest' 最近邻插值
%最近邻插值 'nearest'
%输出像素的值为输入图像中与其最近的采样点的像素值
f(x,y) = g( round(x), round(y) );
%双线性插值 'bilinear'
%双线性插值又称为一阶插值,可扩展成二维。
首先对上端的两个点进行线性插值,得到: f(x,0) = f(0,0)+x[f(1,0)-f(0,0)]
然后对下端的两个顶点进行线性插值,得到: f(x,1) = f(0,1)+x[f(1,1)-f(0,1)]
最后,对垂直方向进行线性插值,得到: f(x,y) = f(x,y)+x[f(x,0)-f(x,0)]
整理得出:f(x,y) = [ f(1,0)-f(0,0) ]x+ [ f(0,1)-f(0,0) ]y + [ f(1,1)+f(0,0)-f(0,1) ]xy + f(0,0)
其他相关文章请点击:
图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值
图像算法三:【图像增强--空间域】图像平滑、中值滤波、图像锐化
图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波
图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波
图像算法六:【彩色图像处理】彩色模型、彩图处理
图像算法七:【形态学图像处理】二值运算、膨胀、腐蚀
图像算法八:【图像分割】边缘检测(Roberts,Sobel,canny)、霍夫变换(hough)、阈值分割、区域分割
图像算法九:【图像特征提取】特征降维、PCA人脸特征抽取、局部二进制
~~~~
图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值相关推荐
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- OpneCV之图像的平移、翻转、旋转、缩放、裁剪(笔记04)
demo图片: 平移 代码: import numpy as np import matplotlib.pyplot as plt import cv2 #图像的平移def show(image):p ...
- vc对图像进行平移,转置等几何变换
//平移变换 void GeometryTrans::Move(int offsetX, int offsetY) {if (m_pImgDataOut!=NULL){delete []m_pImgD ...
- C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放)
C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放) 移动 旋转 镜像 转置 缩放 自定义结构及函数如下: #define pi 3.1415926 typedef struct {unsig ...
- 计算机图形学笔记——第7章 二维几何变换 Python
第7章 二维几何变换 应用于对象几何描述并改变它的位置.方向或大小的操作称为几何变换(geometric transformation). 几何变换有时也称为建模变换(modeling transfo ...
- 计算机图形学 学习笔记 二维几何变换
应用于对象几何描述并改变它的位置.方向或大小的操作称为几何变换. 几何变换有时也称为建模变换.建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等.另一方面,几何变换能用来描述动画 ...
- Python图像处理丨带你掌握图像几何变换
摘要:本篇文章主要讲解图像仿射变换和图像透视变换,通过Python调用OpenCV函数实. 本文分享自华为云社区<[Python图像处理] 十二.图像几何变换之图像仿射变换.图像透视变换和图像校 ...
- C#图像处理-OpenCVSharp教程(十二) OpenCVSharp图像几何变换:平移、旋转、缩放、转置和镜像等
本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp图像几何变换:平移.旋转.缩放.转置和镜像等! 一.图像缩放 // 图像缩放-- - Resize Mat ...
最新文章
- linux系统启动盘怎么制作工具,windows系统制作linux启动盘工具介绍
- 深入解读Python的unittest并拓展HTMLTestRunner
- hp代码改成linux代码,HP Database Archiving Software远程任意代码执行漏洞
- SVN的安装笔记和要注意的问题
- QWidget::size()和QResizeEvent::size()不一定相同!
- 6个特征,判断你的领导值不值得追随
- oppoa1计算机记录删了怎么办,捡到oppoA1怎么解锁
- 如何在 Linux 终端中知道你的公有 IP
- 1.MATLAB简介
- HTML问答页面模板,问答社区简单静态页面模板
- DataTable 服务端模式 进行分页 排序搜索
- i2c-test工具说明文档
- 如何把公共WiFi据为己有,修改别人的路由器WiFi密码,作者只支持技术,不支持后果
- Canvas绘制圆点线段
- c++ 摇摆序列 (贪心+状态自动机)
- 学习用WinRAR解压缩软件解压下载的PPStream压缩包
- 实时系统和分时系统的区别
- LG G3升级Android 6.0 Marshmallow方法亲测!界面渲染精美,拒绝卡顿,提升续航!
- ROS学习笔记(一):创建工作空间和功能包
- 网页flv下载探索_1