700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 图像算法二:【图像几何变换】平移 镜像 转置 缩放 旋转 插值

图像算法二:【图像几何变换】平移 镜像 转置 缩放 旋转 插值

时间:2021-05-20 18:59:42

相关推荐

图像算法二:【图像几何变换】平移 镜像 转置 缩放 旋转 插值

作为一个强大的科学计算软件,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 01 ]);%定义水平镜像变换矩阵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',[010 ; 1 0 0 ; 001 ]); %定义转置变换矩阵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 01

%围绕中心点的图像旋转

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人脸特征抽取、局部二进制

~~~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。