- 精通Matlab数字图像处理与识别
- 张铮 倪红霞 苑春苗 杨立红编著
- 1112字
- 2020-06-26 13:09:53
4.1 解决几何变换的一般思路
图像几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换的关键就是要确定这种空间映射关系,以及映射过程中的变换参数。
几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。一个几何变换需要两部分运算:首先是空间变换所需的运算,如平移、旋转和镜像等,需要用它来表示输出图像与输入图像之间的(像素)映射关系;此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。
设原图像 f(x0,y0)经过几何变换产生的目标图像为 g(x1,y1),则该空间变换(映射)关系可表示为
其中,s(x0,y0)和 t(x0,y0)为由 f(x0,y0)到g(x1,y1)的坐标变换函数。例如,当x1= s(x0,y0)= 2x0,y1= t(x0,y0)=2y0时,变换后的图像 g(x1,y1)只是简单地在 x和 y两个空间方向上将 f(x0,y0)的尺寸放大一倍。因此,我们看到只要掌握了有关变换函数s(x0,y0)和t(x0,y0)的情况,就可以遵循下面的步骤实现几何变换。
算法4.1
根据空间变换的映射关系,确定变换后目标图像的大小(行、列范围);//有些变换可能改变图像大小
计算逆变换s−1 ( j1,i1)和t−1 ( j1,i1);
逐行扫描目标图像g(x1,y1),对于g(x1,y1)中的每一点(j0,i0):
{
根据空间变换的映射关系,计算得:
j0'= s−1 ( j1,i1); //直接通过映射关系计算得到的横坐标,可能不是整数
i0'= t−1 ( j1,i1); //直接通过映射关系计算得到的纵坐标,可能不是整数
根据选用的插值方法:
(j0,i0) = interp(j0’, i0’ ); //对于非整数坐标(j0’, i0’)需要插值
If (j0,i0) 在图像f之内
拷贝对应像素:g(j1,i1) = f(j0,i0);
Else
g(j1,i1) = 255;
}
对于几何失真图像的复原(校正)过程正好是上述变换的逆过程。
式 4-3和式4-4表示相应的由 g(x1,y1)到 f(x0,y0)的逆变换。此时,经过某种几何变换而失真的图像 g(x1,y1)是我们要复原的对象,原始图像 f(x0,y0)是我们复原的目标。
对服务于识别的图像处理而言,作为图像几何归一化的逆变换过程的应用常常更为广泛。当然,在变换中究竟以谁作为原始图像 f(x0,y0),以谁作为变换图像g(x1,y1)并不是绝对的,这完全取决于我们在分析特定问题过程中的立场。比如说对于图4.1中的两幅图像,一般的做法是以图4.1(a)为原始图像,图4.1(b)为变换图像。这是因为在图4.1(a)中我们关心的对象(数字和字母)处于一个便于观察的角度(正的)。但我们也完全可以将图 4.1(b)视为 f(x0,y0),而图 4.1(a)为g(x1,y1)。此时,相应的映射关系s和t也会发生变化。
注意
当图像归一化(参见3.7节)用于消除几何因素(视角、方位等)造成的图像外观变化时,称为(图像)几何归一化,它能够排除对象间几何关系的差别,找出图像中的那些几何不变量,从而得知这些对象原本就是一样的或属于相同的类别。
▲图4.1 旋转前后的两幅图像