医学图像配准技术从基于特征的配准方法发展到基于统计的配准方法有其突破性的意义。与基于特征的配准方法相比,基于统计的配准方法的突出优点为鲁棒性好、配准精度高、人工干预少。基于统计的配准方法通常是指最大互信息的图像配准方法。
基于互信息的图像配准是用两幅图像的联合概率分布与完全独立时的概率分布的广义距离来估计互信息,并作为多模态医学图像配准的测度。当两幅基于共同的解剖 结构的图像达到最佳配准时,它们的对应像素的灰度互信息应为最大。由于基于互信息的配准对噪声比较敏感,首先,通过滤波和分割等方法对图像进行预处理。然 后进行采样、变换、插值、优化从而达到配准的目的。
基于互信息的配准技术属于基于像素相似性的方法。它基于图像中所有的像素进行配准,基于互信息的图像配准引入了信息论中的概念,如熵、边缘熵、联合熵和互信息等,可使配准精度达到亚像素级的高精度。
基于互信息只依赖于图像本身的信息,不需要对图像进行特征点提取和组织分类等预处理,是一种自动而有效的配准算法。该算法可靠,对图像中的几何失真、灰度 不均匀和数据的缺失等不敏感。不依赖于任何成像设备,可应用于多模态医学图像配准。基于互信息的图像配准也有其缺点,它运算量大,对噪声敏感,要求待配准 图像间联合概率分布函数必须是严格正性的。
【例7-1】计算两幅图像的互信息。
function mi = MI(a,b)
%Caculate MI of a and b in the region of the overlap part
%计算重叠部分
[Ma,Na] = size(a);
[Mb,Nb] = size(b);
M=min(Ma,Mb);
N=min(Na,Nb);
%初始化直方图数组
hab = zeros(256,256);
ha = zeros(1,256);
hb = zeros(1,256);
%归一化
if max(max(a))~=min(min(a))
a = (a-min(min(a)))/(max(max(a))-min(min(a)));
else
a = zeros(M,N);
end
if max(max(b))-min(min(b))
b = (b-min(min(b)))/(max(max(b))-min(min(b)));
else
b = zeros(M,N);
end
a = double(int16(a*255))+1;
b = double(int16(b*255))+1;
%统计直方图
for i=1:M
for j=1:N
indexx = a(i,j);
indexy = b(i,j) ;
hab(indexx,indexy) = hab(indexx,indexy)+1;%联合直方图
ha(indexx) = ha(indexx)+1;%a图直方图
hb(indexy) = hb(indexy)+1;%b图直方图
end
end
%计算联合信息熵
hsum = sum(sum(hab));
index = find(hab~=0);
p = hab/hsum;
Hab = sum(sum(-p(index).*log(p(index))));
%计算a图信息熵
hsum = sum(sum(ha));
index = find(ha~=0);
p = ha/hsum;
Ha = sum(sum(-p(index).*log(p(index))));
%计算b图信息熵
hsum = sum(sum(hb));
index = find(hb~=0);
p = hb/hsum;
Hb = sum(sum(-p(index).*log(p(index))));
%计算a和b的互信息
mi = Ha+Hb-Hab;
%计算a和b的归一化互信息
%mi = hab/(Ha+Hb);
【例7-2】医学图像配准。
(1) 读取图像数据。因为源图像以矩阵形式存在一个二进制的文件里,用fread可将其读取到变量矩阵中。将读取文件编制成一个子函数(RTIread.m)。源代码如下:
function imMatrix=RTIread(FILENAME,SIZE)
%RTIread Read the image matrix from binary "Registration Test Image" file.
% imMatrix=RTIread(FILENAME,SIZE) opens the file FILENAME, and reads the
% number of elements specified by SIZE.
%
% FILENAME is a string containing the name of the file to be opened.
% Valid entries for SIZE are:
% N read N elements into a column vector.
% inf read to the end of the file.
% [M,N] read elements to fill an M-by-N matrix, in column order.
% N can be inf, but M can't.
%
% It returns the image matrix.
fid=fopen(FILENAME,'r');
imMatrix=fread(fid,SIZE,'uint8=>uint8');
fclose(fid);
这里选取了两张256×256的图片,文件名为sag1.tif和sag2.tif。
运行以下代码读取图像矩阵:
base=RTIread('sag1.tif',[256,256]);
input=RTIread(sag2.tif,[256,256]);
(2) 选取匹配点。根据预定的配准方法,选定足够的匹配点对。运行下列代码:
cpselect(input,base); %please select 15 points for test.
出现如图7-4所示的GUI界面。
注意:
这里允许选择15个点进行测试。
操作很简单,只需注意选点要均匀布开,以增加其代表性。选定完毕,再选择File→Save Points to Workspace命令将数据保存到工作区中。Workspace立刻多出两个N×2的数组(其中N为选定的匹配点对数),分别为input_points和base_points。
(3) 利用十字相关法调整选定了的匹配点。如果对上面一个步骤的选点工作不满意,可以进行这一步。如果感觉尚可,则跳过这一步,以减小运算量。
运行代码:
input_points_corr = cpcorr(input_points,base_points,input,base);
%优化选择点的作用
input_points_corr为优化后在输入图片的对应匹配点。
(4) 计算变换公式的参数。利用cp2tform选定变换类型(配准方法),计算变换参数。以下只需选定一种即可。
% (1) not Fine-tune points
Tlinear = cp2tform(input_points,base_points,'linear conformal');
Taffine = cp2tform(input_points,base_points,'affine');
Tprojective = cp2tform(input_points,base_points,'projective');
Tpolynomial2 = cp2tform(input_points,base_points,'polynomial',2);
Tpolynomial3 = cp2tform(input_points,base_points,'polynomial',3);
Tpolynomial4 = cp2tform(input_points,base_points,'polynomial',4);
Tpiecewise = cp2tform(input_points,base_points,'piecewise linear');
Tlwm = cp2tform(input_points,base_points,'lwm');
% (2)Fine-tune points
fTlinear = cp2tform(input_points_corr,base_points,'linear conformal');
fTaffine = cp2tform(input_points_corr,base_points,'affine');
fTprojective = cp2tform(input_points_corr,base_points,'projective');
fTpolynomial2 = cp2tform(input_points_corr,base_points,'polynomial',2);
fTpolynomial3 = cp2tform(input_points_corr,base_points,'polynomial',3);
fTpolynomial4 = cp2tform(input_points_corr,base_points,'polynomial',4);
fTpiecewise = cp2tform(input_points_corr,base_points,'piecewise linear');
fTlwm = cp2tform(input_points_corr,base_points,'lwm');
(5) 变换图像。
% Transform the unregistered image to bring it into alignment.
title('image registration polynomial method');
subplot(2,2,1);
imshow(base);
title('Base image');
subplot(2,2,2);
imshow(input);
title('Input image');
subplot(2,2,3);
imshow(imtransform(input,Tpolynomial2));
title('registered image');
subplot(2,2,4);
imshow(imtransform(input,fTpolynomial2));
title('registered image(fine-tune points)');
图像变换效果如图7-5所示。
图7-5 图像变换效果
小结:
(1) 选择适当的方法来建立转换参数,并非算法越复杂越好,应参考成像因素(退化因素)。
(2) 利用cpselect选择匹配点,cpselect可以返回一个GUI句柄。在使用中,应当尽量选择恰当的匹配区域,这样能够得到较好的效果。
上面的这个例子典型地说明了图像配准的步骤:提取图像特征,根据特征对进行几何变换,执行整个变换。
其中,g为几何门限,得到的边缘初始响应值大小符合SUSAN原理,即USAN区域越小,初始边缘响应就越大。
function image_out = susan(im,threshold)
d = length(size(im));
if d==3
image=double(rgb2gray(im));
elseif d==2
image=double(im);
end
mask = ([ 0 0 1 1 1 0 0 ;0 1 1 1 1 1 0;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;0 1 1 1 1 1 0;0 0 1 1 1 0 0]);
R=zeros(size(image));
nmax = 3*37/4;
[a b]=size(image);
new=zeros(a+7,b+7);
[c d]=size(new);
new(4:c-4,4:d-4)=image;
for i=4:c-4
for j=4:d-4
current_image = new(i-3:i+3,j-3:j+3);
current_masked_image = mask.*current_image;
current_thresholded = susan_threshold(current_masked_image,threshold);
g=sum(current_thresholded(:));
if nmax<g
R(i,j) = g-nmax;
else
R(i,j) = 0;
end
end
end
image_out=R(4:c-4,4:d-4);
//程序
image_in=imread('rice.png');
image = susan(image_in,27);
图10-9为SUSAN边缘检测效果图。
图10-9 SUSAN边缘检测效果图
除了以上介绍的边缘检测方法,其实在目前的边缘检测算法的研究过程中,小波技术在边缘检测中也成为一种主要的研究方向。这里简单地介绍一下。
基于内容的方法是近来研究的热点,利用小波进行边缘检测也是一种方法,它还可用于特征点的检测,Mexican Hat wavelet 尺度交互方法最初由Manjunath等提出。通过识别发生在同一图像不同尺度版本显著强度变化来决定特征点。该方法应用Mexican Hat wavelet的两个不同尺度到同一图像并且计算两个尺度图像的尺度交互图像,尺度差图像的局部极值决定了特征点。Mexican Hat wavelet,也叫做Marr wavelet,具有旋转不变性,因为它有圆形对称频域响应。位于x的Mexican Hat wavelet 定义为
其中。
尺度差图像由下列式子得到
代表尺度为i的Mexican Hat wavelet在位置x的响应。是一个规范常数,代表不同尺度i和j的尺度差,的局部极值就决定了潜在的特征点集。这些点中强度超过一定阈值的就被认为是特征点。
如图10-10所示是一个例子。
(a) 原始图像 (b) Mexican Hat wavelet滤波图像(scale 3.0)
(c) Mexican Hat wavelet滤波图像( scale 4.0) (d) 不同尺度图像差