图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现
- 格式:doc
- 大小:15.57 KB
- 文档页数:12
在Matlab中进行图像配准和形变分析图像配准是计算机视觉和医学影像处理中的一个重要技术,它用于对多个图像进行比较、分析和匹配。
图像形变分析则是对配准后的图像进行进一步分析,得到图像中的形变信息。
在Matlab中,有多种方法可以实现图像配准和形变分析,下面将介绍一些常用的方法及其应用。
一、基础知识在进行图像配准和形变分析之前,需要了解图像的基本概念和表示方式。
在Matlab中,图像通常表示为一个矩阵,每个元素代表图像中某个像素的灰度值或颜色值。
图像配准的目标是将两幅或多幅图像进行对齐,使它们在空间上完全或部分重叠。
为了实现配准,需要找到两个图像之间的几何变换关系。
常见的几何变换包括平移、旋转、缩放和仿射变换。
形变分析是对配准后的图像进行进一步分析,得到图像中的形变信息。
形变可以分为刚体形变和非刚体形变。
刚体形变是指图像中的物体保持形状和大小不变,只发生位置上的改变;非刚体形变是指图像中的物体发生形状和大小的改变。
二、图像配准方法1. 特征点匹配法特征点匹配是一种常用的图像配准方法。
它通过在图像中提取出一些显著的特征点,如角点和边缘点,然后在不同图像之间进行特征点的匹配,从而得到两个图像之间的几何变换关系。
在Matlab中,可以使用SURF算法(加速稳健特征)来提取特征点,并使用RANSAC算法(随机抽样一致性)来进行特征点的匹配。
通过这种方法,可以实现较好的图像配准效果。
2. 互信息法互信息是一种在图像配准中常用的相似性度量方法。
它通过计算两个图像间的信息增益来评估它们的相似性。
在Matlab中,可以使用imregister函数来实现基于互信息的图像配准。
3. 形状上下文法形状上下文是一种用于描述和匹配不同形状的方法。
在图像配准中,可以使用形状上下文来描述图像中的特征点,并基于形状上下文的距离度量来进行特征点的匹配。
在Matlab中,可以使用shape_context函数来实现形状上下文法。
三、图像形变分析方法1. 网格形变法网格形变是一种常用的图像形变分析方法。
MATLAB中的图像配准与形变分析技术一、引言图像处理是计算机科学中重要的研究领域之一,图像配准与形变分析技术是图像处理中的一个重要分支。
在现代科技和医学领域,图像配准和形变分析技术的应用非常广泛。
本文将介绍MATLAB中的图像配准与形变分析技术的原理、方法和应用。
二、图像配准的原理与方法图像配准是指将两幅或多幅图像对齐,使其在空间上一一对应。
在MATLAB 中,实现图像配准有多种方法,常用的方法包括灰度匹配、特征点匹配和基于变换模型的配准。
1. 灰度匹配灰度匹配是将两幅图像的像素值进行调整,使它们的直方图相似。
在MATLAB中,可以使用imhist和histeq函数实现灰度匹配。
imhist函数可以计算图像的直方图,而histeq函数可以对图像进行直方图均衡化,从而达到灰度匹配的效果。
2. 特征点匹配特征点匹配是一种常用的图像配准方法,它通过提取图像中的关键特征点,然后利用这些特征点进行图像对应的搜索与匹配。
在MATLAB中,可以使用SURF (速度加速稳健特征)算法或SIFT(尺度不变特征转换)算法来提取图像中的特征点。
通过特征点的匹配,可以得到两幅图像之间的对应关系,并进一步进行图像的配准。
3. 基于变换模型的配准基于变换模型的配准是一种基于几何变换的图像配准方法。
在MATLAB中,常用的变换模型有仿射变换、透视变换等。
仿射变换是一种线性变换,可以通过三个非共线的点对进行计算。
MATLAB提供了cp2tform函数,可以通过特征点匹配得到的对应关系计算出仿射变换矩阵,从而实现图像的配准。
透视变换是一种非线性变换,可以通过四个非共线的点对进行计算。
在MATLAB中,可以使用fitgeotrans函数计算出透视变换矩阵,并实现图像的配准。
三、形变分析的原理与方法形变分析是指对图像进行变形分析,研究形变的特点和规律。
在MATLAB中,可以使用变形场和形变图来表征形变信息。
1. 变形场在形变分析中,变形场是指描述变形大小和方向的向量场。
matlab仿射变换
【原创实用版】
目录
1.MATLAB 仿射变换的基本概念
2.MATLAB 仿射变换的常用函数
3.MATLAB 仿射变换的应用实例
4.总结
正文
一、MATLAB 仿射变换的基本概念
仿射变换是一种在平面或空间中将图形进行变换的方法,其包括平移、旋转、缩放等操作。
在 MATLAB 中,我们可以使用矩阵操作来实现这些变换。
二、MATLAB 仿射变换的常用函数
1.仿射变换矩阵
在 MATLAB 中,我们可以通过创建一个变换矩阵来进行仿射变换。
变换矩阵是一个 3x3 的矩阵,其中包括旋转、平移和缩放信息。
2.变换函数
MATLAB 提供了一个名为"transform"的函数,可以用于执行仿射变换。
其基本语法为:
```matlab
T = transform(A, B, C)
```
其中,A 是变换矩阵,B 是旋转向量,C 是缩放因子。
三、MATLAB 仿射变换的应用实例
假设我们有一个图形,需要将其进行平移、旋转和缩放操作,我们可以使用以下步骤:
1.创建一个变换矩阵,包括平移向量、旋转向量和缩放因子
2.使用"transform"函数对图形进行变换
3.绘制变换后的图形
四、总结
MATLAB 仿射变换是一种强大的图形处理工具,可以实现各种复杂的变换操作。
如何进行MATLAB图像配准和变换引言图像配准和变换是数字图像处理中一项重要任务,它能够将不同空间、不同感知角度或不同时间采集的图像进行对齐,从而实现图像像素之间的准确匹配。
MATLAB作为一种常用的科学计算软件,提供了丰富的图像处理函数和工具箱。
本文将介绍如何使用MATLAB进行图像配准和变换,以帮助读者更好地理解和应用这些功能。
一、图像配准基础1. 图像配准定义图像配准是指将两幅或多幅图像通过某种变化,使得它们的像素点对齐。
这种对齐可以通过平移、旋转、缩放等几何变换来实现。
2. 图像配准应用图像配准在许多领域都有广泛的应用,如医学图像处理、遥感图像处理、计算机视觉等。
例如,在医学领域,图像配准可以用于将不同时间拍摄的磁共振图像对齐,以便医生更好地观察患者的病情变化。
二、MATLAB图像配准函数MATLAB提供了几个常用的图像配准函数和工具箱,方便用户进行图像配准和变换。
下面将介绍一些常用的函数和工具箱。
1. imregister函数imregister函数是MATLAB中一个常用的图像配准函数,它能够将两幅图像进行几何变换以实现图像配准。
该函数基于最大互信息和归一化互相关等算法实现,能够自动处理旋转、平移、缩放和扭曲等运动畸变。
2. cpselect工具箱cpselect工具箱是MATLAB中用于图像配准的一个交互式工具箱。
它能够通过用户交互的方式,选择两幅图像中的对应点,计算并输出变换矩阵。
用户可以通过可视化的界面进行点选,并查看配准效果。
三、图像配准步骤基于MATLAB提供的函数和工具箱,进行图像配准的一般步骤如下:1. 加载图像使用imread函数加载待配准的图像,将其转换为灰度图像或彩色图像,存储为变量img1和img2。
2. 预处理图像根据具体情况,对图像进行预处理操作,如去噪、平滑、增强等。
这一步骤可以提高后续配准的准确性和稳定性。
3. 选择对应点使用cpselect工具箱,通过交互方式选择两幅图像中的对应点。
图像的变换1. 离散傅立叶变换的Matlab 实现Matlab 函数fft、fft2 和fftn 分别可以实现一维、二维和N 维DFT 算法;而函数ifft、ifft2 和ifftn 则用来计算反DFT 。
这些函数的调用格式如下:A=fft(X,N,DIM)其中,X 表示输入图像;N 表示采样间隔点,如果X 小于该数值,那么Matlab 将会对X 进行零填充,否则将进行截取,使之长度为N ;DIM 表示要进行离散傅立叶变换。
A=fft2(X,MROWS,NCOLS)其中,MROWS 和NCOLS 指定对X 进行零填充后的X 大小。
A=fftn(X,SIZE)其中,SIZE 是一个向量,它们每一个元素都将指定X 相应维进行零填充后的长度。
函数ifft、ifft2 和ifftn的调用格式于对应的离散傅立叶变换函数一致。
例子:图像的二维傅立叶频谱% 读入原始图像I=imread('lena.bmp');imshow(I)% 求离散傅立叶频谱J=fftshift(fft2(I));figure;imshow(log(abs(J)),[8,10])2. 离散余弦变换的Matlab 实现2.1. dCT2 函数功能:二维DCT 变换格式:B=dct2(A)B=dct2(A,m,n)B=dct2(A,[m,n])说明:B=dct2(A) 计算 A 的DCT 变换 B ,A 与 B 的大小相同;B=dct2(A,m,n) 和B=dct2(A,[m,n]) 通过对A 补0 或剪裁,使B 的大小为m×n。
2.2. dict2 函数功能:DCT 反变换格式:B=idct2(A)B=idct2(A,m,n)B=idct2(A,[m,n])说明:B=idct2(A) 计算 A 的DCT 反变换B ,A 与 B 的大小相同;B=idct2(A,m,n) 和B=idct2(A,[m,n]) 通过对A 补0 或剪裁,使B的大小为m×n。
射影变换、仿射变换、欧式变换、相似变换、等距变换射影变换组成了⼀个群,这个群被称为射影变换群。
仿射变换是射影变换的⼦群。
欧式变换(旋转+平移+等⽐缩放)是仿射变换的⼦群。
相似变换和等距变换则是欧式变换的⼦群。
0.射影变换定义由有限次中⼼射影的积定义的两条直线间的⼀⼀对应变换称为⼀维射影变换。
由有限次中⼼射影的积定义的两个平⾯之间的⼀⼀对应变换称为⼆维射影变换。
性质——交⽐不变性如果平⾯上点场的点建⽴了⼀个⼀⼀对应,并且满⾜:(1)任何共线三点的象仍是共线三点;(2)共线四点的交⽐不变。
则这个⼀⼀对应叫做点场的射影变换,简称射影变换。
矩阵表⽰⽤H表⽰,H为3×3的可逆实矩阵,虽然有9个未知数,但只有8个⾃由度(只与具体⽐率有关),其中h31与h32不为0是它与仿射变换的本质区别,它使得仿射变换的⾮线性效应。
可以把⼀个H分解为:H=SAP,其中S为相似变换,A为仿射变换,P为射影变换。
变换前后共点,共线,交⽐,相切,拐点,切线的不连续性和岐点保持不变。
注:n×n可逆实矩阵称为⼀般线性群GL(n),当把相差⾮零纯量因⼦的矩阵都视为等同时,便得到射影映射群,记为PL(n),在平⾯射影变换时为PL(3)。
射影变换矩阵表⽰:H = { h11, h12, h13h21, h22, h23h31, h32, h33 }其中当最后⼀⾏为(0,0,1)时的变换为仿射变换,在仿射的前提下,当左上⾓2×2矩阵正交时为欧式变换,左上⾓矩阵⾏列式为1时为定向欧式变换。
1、等距变换:它相当于是平移变换和旋转变换的复合,⽤R表⽰变换矩阵,R为3×3矩阵,R={{r11,r12,tx},{r21,r22,ty},{0,0,1}}左上⾓2×2矩阵为旋转部分,tx和ty为平移因⼦,它有三个⾃由度,即旋转,x⽅向平移,y⽅向平移。
等距变换前后长度,⾯积,线线之间的⾓度都不变。
2.相似变换它相当于是等距变换和均匀缩放的⼀个复合,⽤S表⽰变换矩阵,S为3×3矩阵,S={{s*r11,s*r12,tx},{s*r21,s*r22,ty},{0,0,1}}左上⾓2×2矩阵为旋转部分,tx和ty为平移因⼦,它有4个⾃由度,即旋转,x⽅向平移,y⽅向平移和缩放因⼦s。
Matlab中的空间变换方法详解1. 引言在现代科学和工程领域,空间变换是一种重要的数学工具,它在图像处理、机器视觉、计算机图形学等领域中得到广泛应用。
而Matlab作为一种功能强大的数值计算和数据可视化工具,提供了丰富的空间变换方法和函数,方便用户进行数据处理和分析。
本文将详细介绍Matlab中常用的空间变换方法,包括仿射变换、透视变换和图像配准等内容。
2. 仿射变换2.1 仿射变换的概念仿射变换是一种保持直线并比例保持平行线的变换,它可以通过矩阵乘法和向量加法来表示。
在Matlab中,可以使用affine2d对象来定义和实现仿射变换。
affine2d对象可以通过定义变换矩阵和向量来创建,然后可以将其应用于图像或坐标点,实现图像的旋转、平移、缩放等操作。
2.2 仿射变换的应用在图像处理中,仿射变换常用于图像修复、图像拼接和图像配准等应用。
例如,在图像拼接中,我们可以使用仿射变换来将多张图像拼接成一张大图像;在图像配准中,我们可以使用仿射变换来对齐两幅图像,以便进行后续的分析和处理。
3. 透视变换3.1 透视变换的概念透视变换是一种将图像从原始视角转换到目标视角的变换,它常用于图像校正、三维重建等应用中。
在Matlab中,可以使用projective2d对象来定义和实现透视变换。
projective2d对象可以通过定义变换矩阵来创建,并可以将其应用于图像或坐标点,实现图像的透视变换。
3.2 透视变换的应用透视变换在计算机视觉和模式识别中有着广泛的应用。
例如,在图像校正中,我们可以使用透视变换将斜视图像转换为直视图像,以提高图像的可视化效果;在三维重建中,我们可以使用透视变换将多张图像投影到三维空间中,恢复物体的三维结构。
4. 图像配准4.1 图像配准的概念图像配准是一种将多幅图像在空间中对齐的过程,它常用于医学影像、遥感图像和计算机视觉等领域。
在Matlab中,可以使用imregister函数来实现图像配准。
在Matlab中进行图像配准与变形技术随着数字图像处理和计算机视觉的发展,图像配准和变形技术在许多领域中都得到了广泛应用。
图像配准是指将多幅图像对齐,使它们具有相同的空间参考,并且图像间的对应点能够匹配。
而图像变形则是对图像进行形状、尺度或者拓扑结构上的变化。
Matlab作为一个功能强大且易于使用的软件工具,在图像配准和变形技术方面也提供了丰富的函数和工具包。
图像配准是许多计算机视觉应用中的重要步骤。
例如,在医学影像领域,图像配准可以用于将不同时间点或不同模态(例如CT和MRI)的图像对齐,进而实现疾病检测和诊断。
在遥感图像处理中,图像配准则可以用于将不同传感器采集的图像对齐,以应对地理信息的不一致性。
此外,还有许多其他应用,包括计算机辅助手术、视频监控等。
在Matlab中,有多种方法可以实现图像配准。
其中一种常用的方法是基于特征点的配准。
特征点是具有鲁棒性和区分度的图像局部结构。
Matlab中的图像处理工具箱提供了SURF(加速稳健特征)和SIFT(尺度不变特征变换)等常用的特征点提取算法。
通过提取特征点,并采用匹配算法(如RANSAC,随机抽样一致性算法),可以估计图像之间的几何变换关系,进而实现图像的配准。
除了基于特征点的配准方法,Matlab还提供了其他方法,如基于相位相关(phase correlation)的配准。
相位相关是一种基于频域的图像配准方法,它通过计算图像间的互相关,来估计图像间的平移变换。
Matlab中的fft2函数可以用于计算二维离散傅立叶变换,进而实现相位相关配准。
相位相关方法适用于平移变换比较明显的图像配准场景。
在进行图像变形时,Matlab提供了很多有用的函数和工具包。
一种常用的图像变形方法是基于仿射变换。
仿射变换是一种线性变换,能够保持图像的平行线和比例关系。
在Matlab中,可使用affine2d和imwarp函数实现仿射变换。
另一种常见的变形方法是基于非线性变形场(non-rigid deformation field)的变形。
Matlab中的空间变换与几何校正方法引言Matlab是一种功能强大的数学软件,它在图像处理和计算机视觉领域有着广泛的应用。
其中,空间变换和几何校正是两个重要的方面。
本文将介绍Matlab中的空间变换方法和几何校正方法,并分析它们的原理和应用。
一、空间变换方法空间变换是指对图像进行平移、旋转、缩放和扭曲等操作,以实现图像的几何变换。
Matlab提供了多种空间变换方法,包括仿射变换、透视变换和弹性变形等。
1. 仿射变换仿射变换是一种保持直线和平行线间距比例的变换。
在Matlab中,可以使用imtransform函数实现仿射变换。
具体操作包括定义仿射变换矩阵,将变换矩阵作为输入参数传递给imtransform函数,然后将变换后的图像进行显示或保存。
2. 透视变换透视变换是一种非线性的空间变换,它可以将一个平面上的图像转换成位于另一个平面上的图像。
在Matlab中,可以使用fitgeotrans函数估计透视变换参数,并使用imwarp函数进行透视变换。
透视变换常用于图像矫正、立体视觉和摄像头标定等领域。
3. 弹性变形弹性变形是一种基于物理模型的变换方法,它可以对图像进行局部扭曲和形变。
Matlab中的imspecular函数可用于实现弹性变形。
它可以根据一组控制点的位置和形变力场参数,实现图像的弹性变形处理。
弹性变形常用于医学图像分析、形变测量和表面拟合等应用。
二、几何校正方法几何校正是指对图像进行校正和修正,以纠正因成像设备和拍摄条件引起的几何变形和畸变。
Matlab提供了多种几何校正方法,包括相机标定、图像纠正和立体校正等。
1. 相机标定相机标定是指确定相机内外参数的过程。
在Matlab中,可以使用cameraCalibrator应用或相机标定工具箱进行相机标定。
相机标定可以获取相机的畸变模型和内外参数,进而进行图像校正、立体匹配和虚拟现实等应用。
2. 图像纠正图像纠正是指纠正图像中的畸变和变形。
Matlab技术图像变换方法图像处理是数字信号处理的重要应用之一,而Matlab作为一款强大的数学计算软件,其在图像处理领域也有着广泛的应用。
图像变换是图像处理的重要环节,通过变换可以改变图像的表现形式,提取图像的有用信息,实现图像的增强、去噪、特征提取等目标。
本文将重点介绍Matlab中常用的图像变换方法,并探讨其原理和应用。
一、灰度图像变换灰度图像变换是图像处理中最为基础的操作之一,可以通过调整像素值的亮度、对比度等来改变图像的视觉效果。
Matlab提供了多种函数来实现灰度图像变换,如imadjust、histeq等。
imadjust函数通过调整图像的亮度和对比度来改变图像的整体视觉效果。
其基本原理是通过对原始图像的像素值进行非线性变换,将像素值映射到指定的亮度范围内。
具体而言,imadjust函数根据输入的亮度调整阈值,将图像的低灰度和高灰度值进行映射,实现对图像亮度的调整。
例如,可以通过提高亮度调整阈值,增加图像的对比度。
histeq函数通过直方图均衡化来改变图像的灰度分布,实现对图像的自适应增强。
其基本原理是通过映射原始图像的灰度直方图到一个均匀分布的形式,从而使得图像的灰度值分布更加均衡。
直方图均衡化能够增强图像的对比度,凸显图像的细节信息。
例如,可以使用histeq函数来增强图像中的暗部细节。
二、几何图像变换几何图像变换是通过对图像的坐标进行变换,改变图像的形状或尺寸。
Matlab提供了多种函数来实现几何图像变换,如imresize、imrotate等。
imresize函数通过改变图像的尺寸来实现图像的缩放。
其基本原理是通过插值算法,在输入的图像基础上生成一个新的图像。
可以通过指定缩放比例来控制图像尺寸的变化,也可以通过指定输出图像的大小来实现图像的精确缩放。
imrotate函数通过旋转图像的角度来实现图像的旋转变换。
其基本原理是通过对输入图像的每个像素位置进行变换,从而得到旋转后的图像。
图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现第二次写CSDN文档,上一篇的排版实在太烂了,于是决定认真学习一下markdown的语法。
好了,废话不多说,今天,我们学习一下图像(2维平面)到图像(2维平面)的四种变换,等距变换,相似变换,仿射变换,投影变换首先介绍它的原理,最后介绍matlab的实现1.数学基础射影变换矩阵H属于射影群PL(n)中的一个,仿射群是由PL(3)中最后一行为(0,0,1)的矩阵组成的子群,包括仿射群,欧式群,其中欧式群是仿射群的子群,其左上角的矩阵是正交的,当它的行列式为1是称为定向欧式群,距离是欧式群的不变量,但不是相似群的不变量,而夹角是这两个群的不变量。
听了这么多群,不变量的数学概念,可能有点晕,下面我用最直观的语言解释。
线性空间中的线性变换可以用矩阵来描述,因此我们用矩阵来刻画这四种变换。
我们以数学系的经典代数入门教材北大版的《高等代数》为例,研究这些变换是如何进行的2. 等距变换等距变换(isometric transform),保持欧式距离不变,当图像中的点用齐次坐标表示时,变换矩阵如下所示:???x′y′1???=???εcos(θ)εsin(θ)0?εsin(θ)?εcos(θ)0txty1??? ???xy1???当ε=1是保向的,ε=?1是逆向的,等距变换可以更简单的写成x′=HEx=(R0t1)x其中R是旋转矩阵。
t是平移矢量,有3个自由度(1旋转角θ+两个平移tx,ty),需要2组点4个方程求解,等距变换的不变量是:长度,角度,面积。
用matlab实现等距变换如下:clear;close all;clcI=imread('book1.jpg');figure,imshow(I);[w,h]=size(I);theta=pi/4;t=[100,100];s=0.5;% test Eucludian transformH_e=projective2d([cos(theta) -sin(theta) t(1);sin(theta) cos(theta) t(2);0 0 1]');newimg=imwarp(I,H_e);figure,imshow(newimg); 12345678910111213141234567891011121314可以看出,等距变换就是对图像的旋转+平移3. 相似变换相似变换(similarity transform):等距变换+均匀缩放,当图像中的点用齐次坐标表示时,变换矩阵如下所示:???x′y′1???=???scos(θ)ssin(θ)0?ssin(θ)?scos(θ)0txty1?? ????xy1???当s=1是保向的,s=?1是逆向的,相似变换可以更简单的写成x′=HSx=(sR0t1)x其中R是旋转矩阵。
t是平移矢量,s是缩放尺度,有4个自由度(1旋转角θ+2个平移tx,ty+1个缩放尺度),需要2组点4个方程求解,相似变换的不变量是:角度,长度的比例,面积的比例。
用matlab实现相似变换如下:clear;close all;clcI=imread('book1.jpg');figure,imshow(I);[w,h]=size(I);theta=pi/4;t=[100,100];s=0.5;%% test similar transformH_s=projective2d([s*cos(theta) -s*sin(theta) t(1);s*sin(theta) s*cos(theta) t(2);0 0 1]'); newimg=imwarp(I,H_s);figure,imshow(newimg); 123456789101112131415123456789101112131415可以看出,等距变换就是对图像的旋转+平移+缩放,这个图相对原图是变小了一些。
4. 仿射变换仿射变换(affine transform):非奇异变换+均匀缩放,当图像中的点用齐次坐标表示时,变换矩阵如下所示:???x′y′1???=???a11a210a12a220txty1??????xy1???仿射变换可以更简单的写成x′=HAX=(A0t1)x其中A是仿射矩阵。
t是平移矢量,s是缩放尺度,有6个自由度(4个仿射矩阵的元素+2个平移tx,ty),需要2组点4个方程求解。
这里多说一句,仿射变换的A矩阵是可以做SVD分解的,即:A=R(θ)R(??)DR(?)D=diag(λ1,λ2)仿射变换A可以看作是一个旋转?+x,y方向按照比例因子λ1,λ2的缩放+回转??+旋转θ的复合变换,仿射变换的不变量是:平行线,平行线的长度的比例,面积的比例。
用matlab实现仿射变换如下:clear;close all;clcI=imread('book1.jpg');figure,imshow(I);[w,h]=size(I);theta=pi/4;t=[100,100];s=0.5;%% test affine transformH_a=projective2d([1 0.5 t(1);0 0.5 t(2);0 0 1]');newimg=imwarp(I,H_a);figure,imshow(newimg); 123456789101112131415123456789101112131415可以看出,仿射变换就是对图像的旋转+平移+缩放+切变(shear),相比前两种变换图像的形状发生了改变,但是原图中的平行线仍然保持平行。
5. 射影变换射影变换(projection transform):当图像中的点的齐次坐标的一般非奇异线性变换。
有些文献中把射影变换矩阵称为单应性矩阵变换矩阵如下所示:???x′y′1???=???h11h21h31h12h22h32h13h231??????xy 1???仿射变换可以更简单的写成x′=HAX=(AvTtv)x其中A是旋转矩阵。
t是平移矢量,s是缩放尺度,有8个自由度(矩阵中的8个h),需要4组点8个方程求解。
同样的,射影变换的A矩阵是可以做分解的,QR分解,SVD 分解都有各自不同的含义。
我们常说的矩阵内外参数矩阵就是QR分解中的一种(QR分解不唯一),即把单应性矩阵分解成=内参矩阵×外参矩阵。
给定世界坐标系中的二维平面,用相机对二维平面拍照,通过对应点求拍摄照片的单应性矩阵(射影矩阵)的过程就称为相机标定,直接用代数的方法求解参数会有一定的误差,在张正友的标定方法中,讲的就是如何通过迭代使得误差最小。
具体可以见我写的第一篇文章张正友相机标定法。
对一般的两张照片也可以求单应性矩阵,具体的应用就是把其中的一张变换到另一张上,进一步可以做图像融合。
射影变换的不变量是:长度的交比。
用matlab实现射影变换如下:clear;close all;clcI=imread('book1.jpg');figure,imshow(I);[w,h]=size(I);theta=pi/4;t=[100,100];s=0.5;%% test projective transformH_P=projective2d([0.765,-0.122,-0.0002;-0.174,0.916,9.050e-05;105.018,123.780,1]);newimg=imwarp(I,H_P);figure,imshow(newimg); 123456789101112131415123456789101112131415可以看出,射影变换就是对图像的旋转+平移+缩放+切变+射影,相比前三种变换图像的形变更为自由,原图中的平行线经过变换之后已经不在平行,而可能相交于一点,射影变换就是把理想点(平行直线在无穷远处相交)变换到图像上。
6 应用说了这么多,下边举一个简单的小应用,就是把通过求两幅对应点的单应性矩阵(射影矩阵),把一种图片变换成另一张的形状。
如图:选择两幅图像对应的四个点第一幅第二幅变换的结果这样就成功把第二幅图片变成第一副图片的角度下面附上代码%% Initialclear;clc;img_num=2; %the number of imagecompress_scale=0.4; %define image compress scalepoints_p=[0 0;1 0;2 1;2 0]; %define cordinate of 2D plain in 3D space%% define a cell that load imageImage=cell(1,img_num);%% read the imageImage{1,1}=imread('book1.jpg');Image{1,2}=imread('book2.jpg');%% image compression, transform rgb to gray, and select feature pointsfeature=[];for i=1:img_numImage{1,i}=imresize(Image{1,i},compress_scale);I{:,:,i}=Image{1,i};Image{1,i}=rgb2gray(Image{1,i});imshow(Image{1,i});hold on;for j=1:4[x,y]= ginput(1); %select the cornerx=round(x);y=round(y);plot(x,y,'ro');feature(j,2*i-1)=x; %feature is a matrix containing corner cordinationfeature(j,2*i)=y;endclose all;end%% calculate homegraphy matrix for each matrix featurep1=feature(:,1:2);featurep2=feature(:,3:4);h = calc_homography(featurep2, featurep1);Im=I{:,:,2};[a,b]=size(I);tform=projective2d(h);J=imwarp(Im,tform); % matlab自带的处理图像变换的函数figure,imshow(I{:,:,1});figure,imshow(I{:,:,2});figure,imshow(J)123456789101112131415161718192021 2223242526272829303132333435363738394041424344 4546471234567891011121314151617181920212223242 526272829303132333435363738394041424344454647。