matlab实现图像的仿射变换和透视变换/homography变换

您所在的位置:网站首页 图片透视变换 matlab实现图像的仿射变换和透视变换/homography变换

matlab实现图像的仿射变换和透视变换/homography变换

2023-11-06 02:14| 来源: 网络整理| 查看: 265

matlab在图像处理中的注意点/坑

1、全局变量在调用它的函数中,都需要声明,不然识别不出来。 2、(天坑)在matlab中,矩阵的行数是图像的高,矩阵的列数是图像的宽。在代码实现的过程中,尽量避免使用(i,j)/(x,y),防止一不留神就拐进C++。(-,-) 我使用的是(rows,columns),其中columns代表的是列数,即我们常用的(x,y)中的y;rows代表的是行数,即我们常用的(x,y)中的x。 3、(头秃)matlab坐标系的原点规定是(1,1),不是(0,0)。 4、在初次完成几何变换的时候,我没有考虑插值方法的选择,为了避免空洞,我尽量使用了后向映射,并且统一采用了最邻近插值法,后面在学习到插值相关知识点时,会回头来完善程序。

彩色图像/非彩色图像在matlab中的显示和处理

非彩色图像可以定义为一个二维函数f(x,y),任意一个二元组(x,y)处的值称为该点处的强度或者灰度。当x,y和灰度值f是离散的数值时,我们称该图像为数字图像。 每一个非彩色图像在matlab中都是一个二维矩阵A[n,m],对非彩色图像的变换其实质就是对二维矩阵A[n,m]进行变换得到另一个二维矩阵B[n,m]的过程。

>>>A=imread('lena.jpg'); >>>size(A) ans=298 252 %A是一个298行252列的矩阵 >>>A=imread('Koala.jpg'); >>>size(A) ans=768 1024 3 %A是一个2三维矩阵 768行1024列3层 仿射变换affine transformation

仿射变换的基础类型包括恒等(identity),尺度(scaling),旋转(rotation),剪切(shear),镜像(mirror),平移(translation),除了平移以外,其他都属于线性变换。线性变换通过矩阵乘法实现,平移通过向量加法实现。

仿射变换的变换通式如下: 仿射变换变换通式

对于各种几何变换来说,就是采用不同的变换矩阵T。

旋转变换的做法

如果是将图像绕某一旋转中心进行旋转的话,在旋转变换之前需要将原坐标系的原点平移到旋转中心,并且在旋转变换之后,再把坐标系移回原位。 在matlab中,我以图像的左上角,即图像的原点(1,1)为固定的旋转中心进行旋转变换,并且重新设置旋转后的图像的宽高。 后向映射法:先由源图像的左上、右上、左下、右下四个图像顶点经过旋转变换,得到目标图像的新宽高,并得到一个包围该图像所有像素值的最小矩形。使用平移变换,将目标图像的左上顶点作为图像原点,移动到坐标原点(1,1);再对目标图像的像素坐标进行旋转变换的逆变换得到其对应的源图像的像素坐标。 旋转

homography变换/透视变换的做法

homography变换和透视变换大相径庭,以homography为例,主要是求单应矩阵。以下是我的推导过程。

homo推导1 homo推导2

在实际的编程实现中,先确定四对变换的点,得出单应矩阵H,然后对源图像所有的像素点进行homography变换。(实际中采用的是后向映射法)

homography/透视变换的应用:虚拟广告牌 & 矫正图像

先将海报素材经过homography变换得到变形图,将变形图叠加到广告牌上指定的地方。

广告牌1 广告牌2 广告牌3 矫正

参考文献

彩色图像和非彩色图像

仿射变换和透视变换



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3