图像配准是数字图像处理的一种重要应用,用于对齐两幅或多幅相同场景的图片。
图像配准需要输入图像与参考图像。输入图像是我们希望变换的图像,参考图像是想要配准输入图像的图像。如:
图像配准的主要方法是使用约束点,输入图像产生输出图形的特定变换通常是不知道,所以需要估计变换函数,而估计变换函数问题是建模问题之一。
基于双线性近似的简单模型:
x = c1v + c2w + c3vw + c4;
y = c5v + c6w + c7vw + c8;
(v, w)和(x, y)分别是输入图像和参考图像中约束点的坐标。如果在两幅图像中有四对相应的约束点,则可以解出8个未知参数。这样构成简单模型,从而可以把一幅图像的像素变换为另一幅图像的像素位置。
当然可以选择更复杂的模型,如最小均方算法等。
图像配准示例代码:
1、读入参考图像和要配准的输入图像
I_base = imread('D:图像处理imagelena1.jpg');
I_in = imrotate(I_base,30);
subplot(121)
imshow(I_base(:,:,1))
title('参考图片')
subplot(122)
imshow(I_in(:,:,1))
title('输入图片')
结果:
2、标准基准点对,将其保存至工作空间。
利用matlab提供的cpselect函数可以交互式地选择基准点。在命令行中按照以下方式调用cpselect启动交互工具
>> cpselect(I_in(:,:,1),I_base(:,:,1));
在该control point select窗口中,点击tool里面的add point一项进行手工标注点(交互式标点),然后在file菜单里export points to workspace 即可输出表定点的坐标位置。
注意:调用cpselect()函数要将需要配准的图像作为第一参数,将基准图像作为后一个参数。并且cpselect只接受灰度图像,如果需要处理RGB彩色图像,可以只给CPselect函数传递一个图像的层。
根据之前得到的控制点对坐标,利用cp2tform函数可以计算变换的参数。将基准点对作为输入传递给cp2tform,选择一种适当的变换类型,cp2tform函数就能确定该类型变换所需的参数,实际上相当于一种数据拟合。cp2tform函数寻找能够拟合控制点对的变换参数,返回一个TFORM的结构的几何变换结构,其中包括几何变换的类型和参数
tform = cp2tform(movingPoints1,fixedPoints1,'affine');
I_out = imtransform(I_in,tform);
figure
subplot(121)
imshow(I_base);
title('参考图像');
subplot(122)
imshow(I_out);
title('输出图像');
最终结果: