www.gusucode.com > 《图像配准技术及其Matlab编程实现》--源码程序 > 《图像配准技术及其Matlab编程实现》/match/sample/ImageRegistration.m

    function varargout=ImageRegistration(varargin)

gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,'gui_Singleton',gui_Singleton,'gui_OpeningFcn',@ImageRegistration_OpeningFcn,'gui_OutputFcn',@ImageRegistration_OutputFcn,'gui_LayoutFcn',[],'gui_Callback',[]);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback=str2func(varargin{1});
end
if nargout
    [varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});
else
    gui_mainfcn(gui_State,varargin{:});
end

addpath(pwd);

function ImageRegistration_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject;
guidata(hObject,handles);

function varargout=ImageRegistration_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;

function pushbutton1_Callback(hObject,eventdata,handles)
clc;
%%%调用OpenImage.m读入参考图像并获取文件名、图像大小
Image_I.FileInformation.IsImage=0;
while Image_I.FileInformation.IsImage==0
    Image_I=OpenImage;
end
delete(Image_I.figure1);
handles.ImsizeI=Image_I.FileInformation.imsize;
handles.filenameI=Image_I.FileInformation.filename;
handles.names_dispI=Image_I.FileInformation.names_disp;
set(handles.text2,'String',handles.names_dispI);
guidata(hObject,handles);

%显示参考图像
axes(handles.axes1);
%[I,map]=imread(handles.filenameI);
I=imread(handles.filenameI);
image(I);
%colormap(map);
%set(gca,'visible','on');

function pushbutton2_Callback(hObject,eventdata,handles)
clc
%调用OpenImage.m读入浮动图像并获取文件名、图像大小
Image_J.FileInformation.IsImage=0;
while Image_J.FileInformation.IsImage==0
    Image_J=OpenImage;
end
delete(Image_J.figure1);
handles.ImsizeJ=Image_J.FileInformation.imsize;
handles.filenameJ=Image_J.FileInformation.filename;
handles.names_dispJ=Image_J.FileInformation.names_disp;
set(handles.text3,'String',handles.names_dispJ);
guidata(hObject,handles);

%显示浮动图像
axes(handles.axes2);
%[J,map]=imread(handles.filenameJ);
J=imread(handles.filenameJ);
image(J);
%colormap(map);
%set(gca,'visible','on');

function pushbutton3_Callback(hObject,eventdata,handles)
clc;
%检测是否已输入考图像与浮动图像
axesIbox=get(handles.axes1,'box');
axesJbox=get(handles.axes2,'box');
if strcmp(axesIbox,'off') | strcmp(axesJbox,'off')
    errordlg('Please select Image for Registration','Error')
    error('NO Image!')
end

%检测参考图像与浮动图像大小是否相同
handles.isSameSizeIJ=strcmp(handles.ImsizeI,handles.ImsizeJ);
if handles.isSameSizeIJ~=1
    errordlg('Please Select the Same Size Image','Error')
    error('Image Size does not match');
end

%读入并复制图像,一幅用于配准过程,另一幅用于配准后输出
I1=imread(handles.filenameI);
J1=imread(handles.filenameJ);
handles.Old_I=I1;
handles.Old_J=J1;
I=ImageTransfer_add(I1);
J=ImageTransfer_add(J1);
handles.I=I;
handles.J=J;

guidata(hObject,handles);

%显示配准前参考图像与浮动图像的“融合”效果图
axes(handles.axes3)
imshow(uint8(I+J))

%调用函数GLPF.m,完成高斯低通预处理
[I,J]=GLPF(handles);
handles.I=I;
handles.J=J;
guidata(hObject,handles);

%调用函数Powell.m,实现图像配准
RegistrationParameters=Powell(handels);
toc
ElapsedTime=toc;

%显示配准结果
handles.RegistrationParameters=RegistrationParameters;
x=RegistrationParameters(1);
y=RegistrationParameters(2);
ang=RegistrationParameters(3);
MI_Value=RegistrationParameters(4);
RegistrationResult=sprintf('X,Y,Angle=[%.5f][%.5f][%.5f]',x,y,ang)
MI_Value=sprintf('MI_Value=[%.4f]',ElapsedTime)

axes(handles.axes4)
[FusionImage,RegistrationImage]=Fusion(handles);
imshow(FusionImage)

axes(handles.axes5)
imshow(RegistrationImage)

set(handles.text8,'string',RegistrationResult);
set(handles.text9,'string',MI_Value);
set(handles.text10,'string',ElapsedTime);