www.gusucode.com > peizhun配准matlab程序源码 > peizhun配准matlab程序源码/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 = imread(handles.filenameI); imshow(I) function pushbutton2_Callback(hObject,eventdata,handles) clc %%%%%%%%%%%%%%调用OpengImage.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 = imread(handles.filenameJ); imshow(J) 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 doesn"t match') end %%%%%%%%%%%%%%%读入并复制图像,一幅用于配准过程,另一幅用于配准后输出 I1 = imread(handles.filenameI); I2 = 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,handels); %%%%%%%%%%%%%显示配准前参考图像与浮动图像的“融合”效果图%%% 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(handles); 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]',MI_Value) ElapsedTime = sprintf('Elapsed Time = [%.3f]',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);