1.算法描述
图像配准(image registration)是对同一场景在不同条件下得到的两幅或多幅图像进行对准、叠加的过程。同一场景的多幅图像会在分辨率、成像模式、灰度属性、位置(平移和旋转)、比例尺度、非线性变形及曝光时间等方面存在很多差异。概括来说,图像配准问题是以在变换空间中寻找一种特定的最优变换,达到使两幅或多幅图像在某种意义上的匹配为目的。 详细论述了这两种常用方法的特点及应用领域,并将基于特征的图像配准方法作为本文的研究重点。基于特征的图像配准方法是目前图像配准最常用的方法之一,特征提取的准确程度和定位的精确程度将对整个配准过程产生很大的影响。本文通过对现有的特征提取方法进行分析,完成图像配准。仿真结果表明该方法在保持配准精度的同时,能够稳定并快速地实现具有平移和旋转的图像的配准问题。最后,本文讨论了图像配准的一个重要应用领域―医学图像拼接。通过实验证明,本文提出的方法满足图像处理过程的实时性和准确性。
医学图像配准和医学图像融合有着密切的关系,特别是对多模态图像而言,配准和融合是密不可分的。待融合的图像往往来自于不同的成像设备,它们的成像方位、角度和分辨率等因子都是不同的,所以这些图像中相应组织的位置、大小等都有差异,若事先不对融合图像进行空间上的对准,那么融合后的图像豪无意义。因此,图像配准是图像融合的先决条件,必须先进行配准变换,才能实现准确地融合。
医学图像配准是医学图像处理的一项基本任务,它可以把来自不同模态或不同时间的多幅图像进行配准,然后为图像的后处理提供保证。如在医学图像融合中,需要将相对应的组织结构融合在一起,而待融合的图像往往来自于不同的成像设备,它们的成像方位、角度和分辨率等因子都是不同的,所以这些图像中相应组织的位置、大小等都有差异,必须先进行配准变换,才能实现准确地融合。医学图像配准的定义:同一个人从不同角度、不同位置拍摄的两张照片,由于拍摄条件不同,每张照片只反映某些方面的特征。要将这两张照片一起分析,就要将其中一张中的人像做移动和旋转,使它与另一幅对齐。这一对齐过程就是配准过程。保持不动的图像叫做参考图像,做变换的图像称为浮动图像。将配准后的图像进行融合就可以得到反映人的全貌的融合图像。医学图像配准就是寻求两幅图像间的几何变换关系,通过这一几何变换,使其中一幅医学图像(浮动图像F)与另外一幅医学图像(参考图像R)上的对应点达到空间上的一致。这种一致是指人体上的同一解剖点在两张匹配图像上具有相同的空间位置。配准的结果应使两幅图像上所有的解剖点,或至少是所有具有诊断意义的点及手术感兴趣的点都达到匹配。
其中h表示二维空间坐标变换,g表示灰度或辐射变换,描述因传感器类型的不同或辐射变形所引入的图像变换。配准的目的就是要找出最佳的空间和几何变换参数。通常意义的配准只关心图像位置坐标的变换,灰度或辐射变换则可以归为图像预处理部分。各种图像配准技术都需要建立自己的变换模型,变换空间的选取与图像的变形特性有关,图像的几何变换可分成全局、局部两类,全局变换对整幅图像都有效,通常涉及矩阵代数,典型的变换运算有平移、旋转和缩放;局部变换有时又称为弹性映射,它允许变换参数存在对空间的依赖性。
基于图像特征的方法是图像配准中最常见的方法,对于不同特性的图像,选择图像中容易提取并且能够在一定程度上代表待配准图像相似性的特征作为配准依据。基于特征的方法在图像配准方法中具有最强的适应性,而根据特征选择和特征匹配方法的不同所衍生出的具体配准方法也是最多种多样的。基于特征的方法作图像配准一般分为三个步骤:
(1)特征提取:根据图像性质提取适用于该图像配准的几何或灰度特征。
(2)特征匹配:根据特征匹配准则,寻找两幅待配准图像中对应的的特征,排除没有对应的特征。
(3)图像转换:根据所求得的图像转换参数,将其带入符合图像形变性质的图像转换式以最终配准两幅图像。
在常用的图像特征信息中,点特征是最常用到的。最简单的配准方法即人工选取图像上一系列同名控制点对,带入多项式以得到图像的转换参数。人工选点的方法具有错误率低,灵活性高,适应性好的特点,但在大量数据处理的应用中要耗费巨大的人力。一般的自动点匹配算法利用图像的固有性质如角点、边缘、形状、封闭区域的重心等获得控制点,而同名控制点间的对应方法包括聚类法、松弛法、Hausdorff距离等。对这类点特征的配准方法,同名控制点匹配是其中的难点,以上方法对控制点的性质都有较苛刻的要求,因而应用范围也受到一定程度的限制。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
image2 = double(imread('b.jpg'));[h2 w2 d2] = size(image2);
point_number=2;
% 图片显示
figure; subplot(1,2,1); image(image1/255); axis image; hold on;
[X1 Y1] = ginput2(point_number); %手动获得特征点
subplot(1,2,2); image(image2/255); axis image; hold on;
[X2 Y2] = ginput2(point_number); %手动获得特征点
%参数估计
Z = [ X2' Y2' ; Y2' -X2' ; 1 1 0 0 ; 0 0 1 1 ]';
xp = [ X1 ; Y1 ];
t = Z \ xp;
a = t(1);
b = t(2);
tx = t(3);
ty = t(4);
T = [a b tx ; -b a ty ; 0 0 1];
%计算大小
cp = T*[ 1 1 w2 w2 ; 1 h2 1 h2 ; 1 1 1 1 ];
Xpr = min( [ cp(1,:) 0 ] ) : max( [cp(1,:) w1] );
Ypr = min( [ cp(2,:) 0 ] ) : max( [cp(2,:) h1] );
[Xp,Yp] = ndgrid(Xpr,Ypr);
[wp hp] = size(Xp);
%变化
X = T \ [ Xp(:) Yp(:) ones(wp*hp,1) ]';