数字图像处理几何变换_第1页
数字图像处理几何变换_第2页
数字图像处理几何变换_第3页
数字图像处理几何变换_第4页
数字图像处理几何变换_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DigitalimageprocessingusingMATLABChapter7:几何操作物理科学与信息工程学院张斌2017.10.20§7.1介绍

几何操作通过一种约束的方式重新排列像素而改变一幅图像的几何布局。

即:不是去改变像素值,而是要改变图像中感兴趣目标或代表特征的像素组之间的相对位置关系。

(a)原始图像(b)平移(移位)(c)放缩(大小调整)(d)旋转几何操作可以用来达到不同的目的:1.校正在图像采集过程中引入的几何失真;2.对已有图像增加特殊的效果;3.作为图像配准(匹配同一场景从不同视角或使用不同设备采集的两幅或多幅图像的共同特征)的一部分。

大多数几何操作包含两个基本的组件:1.映射函数:用一组空间变换方程(以及解它们的过程)来指定;(7.2节内容)2.插值方法:用来计算在空间变换后的图像中各个像素的新值。(7.3节内容)§7.2映射和仿射变换

一个几何操作从数学上可描述为通过调整图像像素的坐标将一幅输入图像f(x,y)变换为一幅新图像g(x’,y’)的过程。即,原来位于坐标(x,y)处的像素值在输出图像中将被重新安排到坐标(x’,y’)处。f(x,y)→g(x’,y’)映射函数:(x’,y’)=T(x,y)映射函数可被指定为两个分离的函数:当_x001A_𝑻_x001B_𝒙_x001B_和_x001A_𝑻_x001B_𝒚_x001B_是x和y的线性组合时,称之为仿射变换,或称仿射映射。_x001A_𝒙_x001B_′_x001B_=_x001A_𝒂_x001B_𝟎_x001B_𝒙+_x001A_𝒂_x001B_𝟏_x001B_𝒚+_x001A_𝒂_x001B_𝟐_x001B__x001A_𝒚_x001B_′_x001B_=_x001A_𝒃_x001B_𝟎_x001B_𝒚+_x001A_𝒃_x001B_𝟏_x001B_𝒚+_x001A_𝒃_x001B_𝟐_x001B_或表示为矩阵:_x001A__x001A_𝒙′_x001B_𝒚′_x001B_𝟏_x001B__x001B_=_x001A__x001A__x001A_𝒂_x001B_𝟎_x001B__x001B__x001A_𝒂_x001B_𝟏_x001B__x001B__x001A_𝒂_x001B_𝟐_x001B__x001B__x001A_𝒃_x001B_𝟎_x001B__x001B__x001A_𝒃_x001B_𝟏_x001B__x001B__x001A_𝒃_x001B_𝟐_x001B__x001B_𝟎_x001B_𝟎_x001B_𝟏_x001B__x001B__x001A__x001A_𝒙_x001B_𝒚_x001B_𝟏_x001B__x001B_

变换

仿射变换将直线变为直线,三角形变换为三角形,矩形变换为平行四边形。平行仍保持平行,而在直线上的点间距离比例保持不变。

四种最常用几何操作:平移、放缩、旋转、剪切表格修改参考文献:《数字图像处理(第3版)》

冈萨雷斯

著除了上述表格中提到的变换,我们在《数字图像处理(第3版)》(冈萨雷斯

著,阮秋琦等

译)书中还找到了以下仿射变换,供参考。

变换名称仿射矩阵T坐标公式例子恒等变换尺度变换旋转变换平移变换(垂直)偏移变换(水平)偏移变换输入输出2D仿射映射的6个参数唯一地由三组对应点所确定。给定相应点变换前和变换后的坐标,可以写出x和y的n个方程并解出n个变换系数。

在MATLAB的IPT中,有两个与仿射变换关联的函数:maketform和imtransform。

函数maketform用来定义希望的2D空间变换,它生成一个包括所有执行变换所需要参数的MATLAB结构(称为TFORM)。除了仿射变换,它还支持投影变换和自定义变换。在定义了需要的变换后,可以使用函数imtransform将其用于输入图像。

例7.1程序代码I=imread('cameraman.tif');%RotationTa=maketform('affine',[cosd(30)-sind(30)0;sind(30)cosd(30)0;001]);Ia=imtransform(I,Ta);%ScalingTb=maketform('affine’,[0.400;00.80;001]');Ib=imtransform(I,Tb);%Translationxform=[1025;0115;001]';Tc=maketform('affine',xform);Ic=imtransform(I,Tc,'XData',[1(size(I,2)+xform(3,1))],'YData',...[1(size(I,1)+xform(3,2))],'FillValues',128);%ShearingTd=maketform('affine',[130;210;001]');Id=imtransform(I,Td);figuresubplot(2,2,1),imshow(Ia);title('旋转');subplot(2,2,2),imshow(Ib);title('放缩');subplot(2,2,3),imshow(Ic);title('平移');subplot(2,2,4),imshow(Id);title('剪切');例7.1程序运行效果拓展:图像的镜像(参考文献[4])镜像分为水平镜像和垂直镜像,特点分别为左右颠倒。水平镜像计算公式为:_x001A__x001A__x001A_𝒙_x001B_′_x001B_=

𝒙_x001B__x001A_𝒚_x001B_′_x001B_=−𝒚_x001B__x001B_

因为图像的矩阵坐标不能为负,因此取完镜像后要进行坐标平移。修正后的水平镜像计算公式为:_x001A__x001A__x001A_𝒙_x001B_′′_x001B_=_x001A_𝒙_x001B_′_x001B_=𝒙_x001B__x001A_𝒚_x001B_′′_x001B_=_x001A_𝒚_x001B_′_x001B_+𝑵+𝟏=𝑵+𝟏−𝒚_x001B__x001B_垂直镜像坐标计算公式为:_x001A__x001A__x001A_

𝒙_x001B_′_x001B_=−𝒙_x001B__x001A_

𝒚_x001B_′_x001B_=

𝒚_x001B__x001B_同理对上述公式进行修正,得到:_x001A__x001A__x001A_𝒙_x001B_′′_x001B_=_x001A_𝒙_x001B_′_x001B_+𝑴+𝟏=𝑴+𝟏−𝒙_x001B__x001A_𝒚_x001B_′′_x001B_=_x001A_𝒚_x001B_′_x001B_=𝒚_x001B__x001B_在MATLAB中,flipud函数用于实现矩阵的上下翻转(图像的垂直镜像),fliplr函数用于实现矩阵的左右翻转(图像的水平镜像)。两者合用可得到对角镜像的效果。下面给出一个应用实例——程序代码:I=imread('football.jpg');figure;subplot(221);imshow(I);title('原始图像')I=double(I);h=size(I);I_fliplr(1:h(1),1:h(2),1:h(3))=I(1:h(1),h(2):-1:1,1:h(3));%水平镜像变换I1=uint8(I_fliplr);subplot(222);imshow(I1);title('水平镜像变换')I_flipud(1:h(1),1:h(2),1:h(3))=I(h(1):-1:1,1:h(2),1:h(3));%垂直镜像变换I2=uint8(I_flipud);subplot(223);imshow(I2);title('垂直镜像变换')I_fliplr_flipud(1:h(1),1:h(2),1:h(3))=I(h(1):-1:1,h(2):-1:1,1:h(3));%对角镜像变换I3=uint8(I_fliplr_flipud);subplot(224);imshow(I3);title('对角镜像变换')运行效果:§7.3.1对插值的需求

对原始图像进行几何操作后,各个像素的结果值可用两种不同的方法计算。一、

前向映射(源到目标映射):计算输入图像所有像素的新坐标并将像素值复制到新坐标位置。§7.3插值方法源图像F目标图像F’前向映射的问题:1.很多由变换式算得的坐标不是整数,需要四舍五入到最近的整数以指示在输出图像中的一个像素;2.很多坐标可能落在界外(例如:负值);3.由上述第一点会导致很多输出像素的坐标在计算中可能被赋值了多次,而有些坐标没有被赋值过。

源图像F目标图像F’二、

后向映射(目标到源的映射)

对输出图像中的每个离散像素位置,通过使用逆映射函数_x001A_𝑻_x001B_−𝟏_x001B_在输入图像中找到对应的连续位置。存在的问题:常产生在原始图像采样网格点之外的结果。

源图像F目标图像F’§7.3.2简单的插值方法(以用因子2放缩图像为例)

若(在两个方向上)以因子2缩小一幅图像,则沿每行和每列每两个像素删除一个;

若(在两个方向上)以因子2放大一幅图像,则将每个像素复制为输出图像中一个2×2的块。

存在的问题:1.放大一幅图像时,“块”效应比较明显;2.在收缩图像过程中可能删除了本质信息;3.很难推广到任意的、非整数的放缩因子。

其他一些简单的插值方法来确定收缩图像中各输出像素的值——使用输入图像中原始n×n块的均值;使用输入图像中原始n×n块的中值。问题:会产生低质量的结果甚至一些情况下失效!§7.3.3零阶(最近邻)插值

将计算的坐标_x001A__x001A_𝒙_x001B_′_x001B_,_x001A_𝒚_x001B_′_x001B__x001B_舍入到它们最近的整数。

特点:计算快;质量低(有块效应、锯齿状直线之类的伪影)。§7.3.4一阶(双线性)插值

用输入图像中围绕参考像素的4个像素灰度值的加权函数来计算插值像素(在坐标_x001A__x001A_𝒙_x001B_′_x001B_,_x001A_𝒚_x001B_′_x001B__x001B_

处)的灰度值。

赋值公式:𝒗_x001A_𝒙,𝒚_x001B_=𝒂𝒙+𝒃𝒚+𝒄𝒙𝒚+𝒅

双线性内插不是一种线性内插方法!因为其赋值公式中含有xy相乘项。

特点:效果优于零阶插值,但需要更多CPU时间。

§7.3.5高阶插值(以3阶插值为例)3阶插值又称为双立方插值(有些书,例如参考文献[3]和[4],也称为“双三次插值”)。它考虑围绕参考像素的4×4邻域并通过将该邻域与一个立方函数卷积来计算插值像素的灰度值。

赋值公式:

双立方插值是商业图像编辑程序的标准内插方法,例如AdobePhotoshop和CorelPhotopaint。

各种插值方法效果对比旋转35°后锯齿边缘效应明显旋转35°后锯齿边缘效应较小旋转35°后几乎没有锯齿边缘效应§7.4.1放大、缩小、调整大小

区分——

大小调整是指调整图像的真实大小,结果造成了图像的尺寸(用像素衡量)改变了,常用非交互的方式进行,其结果可以保存起来长期使用。

而放大、缩小是为了人观察图像而调整图像的大小,真实图像的大小(用像素衡量)并没有发生变化,常用交互的方式进行,其结果仅存在很短的时间。

联系——基于相同的基础算法。

§7.4使用MATLAB进行几何操作MATLAB的IPT中有一个用于调整图像大小的函数:imresize。imresize函数允许用户指定所用的插值方法(默认采用双立方,也可采用最近邻插值法或双线性插值法),它还允许指定一个插值核和附加的参数/值对。

§7.4.2平移

对一幅输入图像f(x,y)相对于它的坐标原点的平移产生一幅输出图像g(x’,y’),其中每个像素都移动了[Δx,Δy](即,_x001A_𝒙_x001B_′_x001B_=𝒙+Δx,_x001A_𝒚_x001B_′_x001B_=𝒚+Δy),这是仿射变换的一种特殊情况。MATLAB中,使用函数imtransform和maketform实现。§7.4.3旋转

仿射变换的一种情况(§7.2已经讨论过),MATLAB中,除可用函数maketform和imtransform实现旋转外,还可使用函数imrotate。与imresize类似,imrotate允许用户指定所用的插值方法,但是其默认方法为最近邻插值方法,用户可指定使用双线性方法或双立方方法。它还允许指定输出图像的尺寸。

§7.4.4裁剪MATLAB的IPT中有一个用来裁剪图像的函数:imcrop,它将图像裁剪成特定的矩形。裁剪的过程可使用鼠标交互进行或将坐标作为参数传给函数。§7.4.5翻转

前面已经讲过,不再赘述。

§7.5其他几何操作和应用§7.5.1扭曲

定义:通过对2D平面重新参数化来变换一幅图像。亦称"橡胶片变换”。

二阶扭曲是多项式扭曲的一个特例,对一个像素(x,y),它的变换坐标(x’,y’)由以下方程给出:_x001A_𝒙_x001B_′_x001B_=_x001A_𝒂_x001B_𝟎_x001B__x001A_𝒙_x001B_𝟐_x001B_+_x001A_𝒂_x001B_𝟏_x001B__x001A_𝒚_x001B_𝟐_x001B_+_x001A_𝒂_x001B_𝟐_x001B_𝒙𝒚+_x001A_𝒂_x001B_𝟑_x001B_𝒙+_x001A_𝒂_x001B_𝟒_x001B_𝒚+_x001A_𝒂_x001B_𝟓_x001B__x001A_𝒚_x001B_′_x001B_=_x001A_𝒃_x001B_𝟎_x001B__x001A_𝒙_x001B_𝟐_x001B_+_x001A_𝒃_x001B_𝟏_x001B__x001A_𝒚_x001B_𝟐_x001B_+_x001A_𝒃_x001B_𝟐_x001B_𝒙𝒚+_x001A_𝒃_x001B_𝟑_x001B_𝒙+_x001A_𝒃_x001B_𝟒_x001B_𝒚+_x001A_𝒃_x001B_𝟓_x001B_

系数_x001A_𝒂_x001B_𝟎_x001B_,…,_x001A_𝒂_x001B_𝟓_x001B_,_x001A_𝒃_x001B_𝟎_x001B_,…,_x001A_𝒃_x001B_𝟓_x001B_用来引入更复杂的失真,例如将直线转变为曲线。

应用:补偿镜头失真,特别是第5章中提到的"桶形失真”和"枕形失真”。

若将上述表达式扩展到3次方,则得到3阶多项式共20个系数,称之为"立方扭曲”。

二阶或更高阶的扭曲操作常由在源图像中的控制点来指定,并将它们映射到目标图像的特定位置。

分段扭曲是多项式扭曲的一种替代,它允许借助覆盖在输入图像上的控制网格来指定期望的扭曲,用户利用鼠标指定控制点,拖动网格线的交点到新的位置。

§7.5.2非线性图像变换

非线性图像变换常包括一个从矩形坐标到极坐标的转换,后接一个对结果点集的有意变形。1.捻转

图像围绕一个坐标为(_x001A_𝒙_x001B_𝒄_x001B_

,

_x001A_𝒚_x001B_𝒄_x001B_)的定位点旋转一个随空间变化的旋转角度。这个角度在定位点的值为α,然后随着与中心径向距离的增加而线性减少。

这种效果局限于最大半径为_x001A_𝒓_x001B_𝒎𝒂𝒙_x001B_的区域,这个区域以外的像素保持不变。捻转变换使用后向映射。

捻转变换的逆映射函数方程(了解):其中:2.纹波

图像沿x和y方向产生一个局部波状移动。

映射函数的参数为(非零)周期长度_x001A_𝑳_x001B_𝒙_x001B_,_x001A_𝑳_x001B_𝒚_x001B_(像素)以及相关联的振幅值_x001A_𝑨_x001B_𝒙_x001B_,_x001A_𝑨_x001B_𝒚_x001B_。

逆变换函数为(了解):使用iPad自带的PhotoBooth得到的图形形变效果:

§7.5.3变形

效果:逐渐地将一幅图像转换为另一幅。

可看作一个修改过的分段弯曲版本。

两种实现方法——1.用户在初始图像和最终图像中指定控制点,然后用这些控制点来生成两个网格(两幅图各一个)。仿射变换将结果网格联系起来,渐进地计算弯曲,一次一个小步骤,并在从初始图像到最终图像中间与一个叠化效果相结合。

2.基于由两幅图像得到的成对的参考线并计算各个像素到每个控制线的直线距离。然后使用距离和相对位置来确定一个像素应该放在最终图像中的正确位置。

这种方法中,所有控制点都在某种程度上影响一个给定像素的输出:线越近,影响越强。

§7.5.4接缝焊接

接缝:一幅图像中从上到下或从左到右的一条最优8连接像素通路,其中“最佳性(optimality)”是用图像能量函数所定义的。

基本思路——在原始图像中寻找接缝并使用该信息完成:(1)通过消去对图像内容贡献最少的接缝来减小图像尺寸;(2)通过插入更多的接缝来扩大图像。

在两个方向都使用这些操作符,可将图像转换为新的尺寸而丢失很少的有意义的内容。原始图像(334×500像素)裁剪的图像(256×256像素)

§7.5.5图像配准

定义:将对同一场景的两幅或多幅图像对其的过程。

主要步骤——(1)各个输入图像都与一幅参考图像(亦称基图像)比较;(2)对输入图像使用一个空间变换以将它与基图像对齐。

关键步骤:确定将图像对齐的空间变换参数。

配准不完美,有明显的黑边原图与配准图的差导致这种差别的是手工选择约束点的误差选择约束点(畸变为发生在两个方向上的线性切变,故只需4个约束点)例子来源:参考文献[3]1.教材中几乎所有的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论