数字图像处理与机器视觉:Visual C++与Matlab实现(第2版)
上QQ阅读APP看书,第一时间看更新

4.8 图像配准简介

在4.2节至4.6节本章依据算法4.1从正变换的角度讲解了图像的平移、镜像、转置、缩放和旋转变换。而本节将要介绍的图像配准技术则是站在几何失真归一化的角度,以一种逆变换的思路来阐述几何变换。

4.8.1 图像配准

所谓图像配准就是将同一场景的两幅或多幅图像进行对准。如航空照片的配准,以及在很多人脸自动分析系统中的人脸归一化,即要使各张照片中的人脸具有近似的大小,尽量处于相同的位置。

一般来说,使用者以基准图像为参照,并通过一些基准点(Fiducial Points)找到适当的空间变换关系st,对输入图像进行相应的几何变换,从而实现它与基准图像在这些基准点位置上的对齐。

下面就以人脸图像的校准为例,学习如何在MATLAB中实现图像配准。

4.8.2 人脸图像配准的MATLAB实现

(1)读入基准图像和要配准的输入图像,结果如图4.18所示。

      >> Iin = imread('face2.jpg');
      >> Ibase = imread('face1.jpg');
      >> figure
      subplot(1, 2, 1), imshow(Iin);
      subplot(1, 2, 2), imshow(Ibase);

图4.18 配准之前的图像,左侧为需要配准的图像,右侧为基准图像

(2)标注基准点对儿,并将其保存至工作空间。

利用MATLAB提供的cpselect()函数可以交互式地选择基准点。在命令行中按照下面的方式调用cpselect()可以启动该交互工具。可以分别单击两幅图像中的相同部分选择成对儿的基准点,如眼睛和嘴角,如图4.19所示。

      >> cpselect(Iin, Ibase);
      >> input_points

      input_points =
        81.8988   89.5000
       130.8988    72.0000
       106.3988   139.0000
       144.8988   122.0000

      >> base_points

      base_points =

        64.1540  111.3750
       112.1540   108.3750
        72.1540  166.8750
       107.1540   163.8750

图4.19 利用cpselect()函数交互地选择基准点对儿

注意调用时要将需要配准的图像作为第一个参数,将基准图像作为后一个参数。还有一点就是cpselect()函数只接受灰度图像,如果需要处理RGB彩色图像,可以只给cpselect()函数传递图像的一个层。RGB图像的cpselect()函数的调用语法如下。

      >>cpselect( Irgb(:, :,1), Ibase); % 只传递输入图像的红色分量图

单击交互工具“File”菜单下的“Save Points to Workspace”选项,可以将之前选择的基准点对儿保存至工作空间。默认情况下,输入图像中的基准点保存在变量“input_points”中,基准图像的基准点保存在变量“base_points”中。

(3)指定要使用的变换类型。

根据之前得到的控制点对儿坐标“input_points”和“base_points”,利用cp2tform()函数可以计算变换的参数。将基准点对儿作为输入传递给cp2tform(),选择一种适当的变换类型,cp2tform()函数就能够确定出该类型变换所需的参数。这实际上相当于一种数据拟合,cp2tform()函数寻找能够拟合控制点对儿的变换参数,它返回一个TFORM结构的几何变换结构,其中就包括了几何变换的类型和参数,调用cp2tform的代码如下。

      >> tform = cp2tform(input_points, base_points, 'affine'); %仿射变换模型

参数’affine’表示选用投影变换。Cpselect()函数总共支持6种类型的变换,包括线性和非线性的,以及2种分段变换,如表4.2所示。实际应用中的关键是要结合失真的具体情况和变换需要选择合适的变换类型。

表4.2 变换类型及其说明

(4)根据变换结构对输入图像进行变换,完成基于基准点的对准。

调用imtransform()函数进行变换,调用代码如下。从而实现配准,函数返回配准后的图像,如图4.20(a)所示。

      >> Iout = imtransform(Iin, tform);
      >> figure
      subplot(1, 2, 1), imshow(Iout);
      subplot(1, 2, 2), imshow(Ibase);

图4.20(b)给出了采用投影模型(调用cp2tform()函数时第3个参数为’projective')的配准效果,同图4.20(a)相比,4个基准点的对齐效果更好,但输入图像的变形也更大一些。

图4.20 配准后的图像