一、光流场模型简介

目前对大脑的研究主要借助于 CT、MRI和 PET等医学成像技术通过成像技术得到的图像可以 提供人脑直观的信息为人脑解剖结构的分析、功能 区域的定义、脑疾病的诊断提供有力依据。因此大脑图像的分析和处理具有重要的实用价值和现实 意义。由于配准所求解的位移场与光流场模型所求解的 速度场具有相似性PalosPierre等人将光流场模型引入到了图像配准中。本文在经典光流场算法的基础上将其应用于非刚性医学图像的配准中得到了相对精确的配准结果。

1 光流场模型算法
如果把浮动图像和参考图像分别看作时间间隔为 Δt的视频流中的t时刻与+Δt时刻的图像那么图像的配准可以认为是从浮动图像流动到参考图像的过程即光流场求解的速度场即为配准所要求解的位移 场‚因此可以借助光流场进行图像配准。

1.1 Horn光流场理论

不能同时求出光流的两个速度分量u和vi因此在具 体求解位移场时‚需要在流动场上附加光滑度约束才能得到光流场的合理估计。

1.2 Lucas-Kanade光流算法

2 基于光流场模型的图像非刚体配准
2.1 配准原理和步骤
采用光流场模型进行图像配准是一个将浮动图像逐步向参考图像变动来求解对应光流模型速度场然后对浮动图像插值获得配准图像的过程具体步骤如下。

续迭代;否则‚继续下一步。 (5)测度函数已收敛终止迭代I3 就是最终的配准图像。

2.2 配准流程图

二、部分源代码

function varargout = optical_flow(varargin)
% OPTICAL_FLOW M-file for optical_flow.fig
%      OPTICAL_FLOW, by itself, creates a new OPTICAL_FLOW or raises the existing
%      singleton*.
%
%      H = OPTICAL_FLOW returns the handle to a new OPTICAL_FLOW or the handle to
%      the existing singleton*.
%
%      OPTICAL_FLOW('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in OPTICAL_FLOW.M with the given input arguments.
%
%      OPTICAL_FLOW('Property','Value',...) creates a new OPTICAL_FLOW or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before optical_flow_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to optical_flow_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Copyright 2002-2003 The MathWorks, Inc.% Edit the above text to modify the response to help optical_flow% Last Modified by GUIDE v2.5 23-Jul-2012 15:10:21% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @optical_flow_OpeningFcn, ...'gui_OutputFcn',  @optical_flow_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before optical_flow is made visible.
function optical_flow_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to optical_flow (see VARARGIN)
% Choose default command line output for optical_flow
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes optical_flow wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = optical_flow_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton_start.
function pushbutton_start_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_start (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global FilePath1
global FilePath2
global versionif ( isequal(FilePath1,'No Picture') || isequal(FilePath2,'No Picture') )errordlg('选择图片出错!','MATLAB error');return
endswitch versioncase { 0, 1, 2 }optic_flow_brox(FilePath1, FilePath2);case 3Horn_WJY(FilePath2, FilePath1);case 4Lucas_Kanade(FilePath2, FilePath1);otherwiseerrordlg('选择算法出错!','MATLAB error');
end% --- Executes on button press in pushbutton_pic1.
function pushbutton_pic1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_pic1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global FilePath1
[FileName,PathName] = uigetfile({'*.jpg';'*.bmp'},'Select the picture');
if ~isequal(FileName,0)FilePath1 = fullfile(PathName,FileName);set(handles.edit_lj1,'String',FilePath1);img=imread(FilePath1);axes(handles.axes_pic1);imshow(img);
end
guidata(hObject, handles);% --- Executes on button press in pushbutton_pic2.
function pushbutton_pic2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_pic2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global FilePath2
[FileName,PathName] = uigetfile({'*.jpg';'*.bmp'},'Select the picture');
if ~isequal(FileName,0)FilePath2 = fullfile(PathName,FileName);set(handles.edit_lj2,'String',FilePath2);img=imread(FilePath2);axes(handles.axes_pic2);imshow(img);
end
guidata(hObject, handles);function edit_lj1_Callback(hObject, eventdata, handles)
% hObject    handle to edit_lj1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_lj1 as text
%        str2double(get(hObject,'String')) returns contents of edit_lj1 as a double% --- Executes during object creation, after setting all properties.
function edit_lj1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_lj1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispcset(hObject,'BackgroundColor','white');
elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
endfunction edit_lj2_Callback(hObject, eventdata, handles)
% hObject    handle to edit_lj2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_lj2 as text
%        str2double(get(hObject,'String')) returns contents of edit_lj2 as a double% --- Executes during object creation, after setting all properties.
function edit_lj2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_lj2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispcset(hObject,'BackgroundColor','white');
elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
endfunction edit_arithmetic_Callback(hObject, eventdata, handles)
% hObject    handle to edit_arithmetic (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_arithmetic as text
%        str2double(get(hObject,'String')) returns contents of edit_arithmetic as a double% --- Executes during object creation, after setting all properties.
function edit_arithmetic_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_arithmetic (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispcset(hObject,'BackgroundColor','white');
elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end% --------------------------------------------------------------------
function uipanel_choice_SelectionChangeFcn(hObject, eventdata, handles)
% hObject    handle to uipanel_choice (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global version
if get(handles.radiobutton_horn,'Value')
s=1;
end
if get(handles.radiobutton_lk,'Value')
s=2;
end
if get(handles.radiobutton_brox,'Value')
s=3;
end
if get(handles.radiobutton_bs,'Value')
s=4;
end
if get(handles.radiobutton_bss,'Value')
s=5;
end
switch scase 1version = 3;set(handles.edit_arithmetic,'String','Horn-Schunck');case 2version = 4;set(handles.edit_arithmetic,'String','Lucas-Kanade');case 3version = 0;set(handles.edit_arithmetic,'String','Brox');case 4version = 1;set(handles.edit_arithmetic,'String','Brox 改进版本');case 5version = 2;set(handles.edit_arithmetic,'String','Brox 改进版本 + Sift');
end
guidata(hObject, handles);% --- Executes during object creation, after setting all properties.
function pushbutton_start_CreateFcn(hObject, eventdata, handles)
% hObject    handle to pushbutton_start (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% --- Executes during object creation, after setting all properties.
function figure1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
addpath('./Brox');
addpath('./Horn_Schunck');
addpath('./Lucas_Kanade');
global version
global FilePath1
global FilePath2
version = 3;
FilePath1 = 'No Picture';
FilePath2 = 'No Picture';

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]侯思祖,陈宇,刘雅婷.基于互信息的紫外成像仪中图像配准研究[J].半导体光电. 2020,41(04)

【图像配准】基于matlab GUI光流场模型图像配准【含Matlab源码 831期】相关推荐

  1. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  2. 【音乐播放】基于matlab GUI动感音乐播放【含Matlab源码 778期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐播放]基于matlab GUI动感音乐播放[含Matlab源码 778期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【雷达通信】基于matlab GUI相控阵雷达方向图【含Matlab源码 1048期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[雷达通信]基于matlab GUI相控阵雷达方向图[含Matlab源码 1048期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  4. 【数据分析】基于matlab GUI齿轮箱振动数据分析【含Matlab源码 2122期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数据分析]基于matlab GUI齿轮箱振动数据分析[含Matlab源码 2122期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  5. 【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI维达尔之眼计算[含Matlab源码 2545期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【光学】基于matlab GUI双孔干涉【含Matlab源码 2119期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双孔干涉[含Matlab源码 2119期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  7. 【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双缝干涉和牛顿环[含Matlab源码 2165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  8. 【数学建模】基于matlab三维海浪模型仿真【含Matlab源码 1159期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab三维海浪模型仿真[含Matlab源码 1159期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付 ...

  9. 【数字信号】基于matlab GUI电话按键识别【含Matlab源码 2382期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI电话按键识别[含Matlab源码 2382期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  10. Matlab GUI/APP 浅谈(附计算器源码)

    Matlab GUI/APP 浅谈(附计算器源码) 今天没有什么段子,也没有心灵鸡汤.毒鸡汤啥的,纯粹聊一聊这些年从有关MATLAB GUI/APP开发中悟出的一点道理,顺便把计算器的源代码给大家. ...

最新文章

  1. 病毒周报(091102至091108)
  2. evcdf matlab,求助大神
  3. DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网...
  4. PE转换分区表格式为GPT
  5. linux终端安装cuda,Ubuntu下安装CUDA10.0以及问题
  6. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构
  7. 玩转oracle 11g(21):修改为静态监听
  8. sfs2x 连接 mongodb
  9. 2019年python黑马_决心在2019年让Python成为您的朋友
  10. 核磁谱图分析步骤_微谱技术:想要涂料开发,少不了仪器分析……
  11. python token flask_flask 实现token机制
  12. python字典弱引用_weakref
  13. 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)
  14. SO、SOP、SOIC、MSOP、TSSOP、TSOP、VSSOP、SSOP、SOJ封装详解
  15. 虚拟机共享服务器设置,虚拟机共享网络设置教程
  16. Latest for Mac 0.7.3 应用更新管理器
  17. 执行retn、call、leave指令的时候,esp和eip的变化情况
  18. python基础教程:python+OpenCV实现车牌号码识别
  19. 29【定时器和延时器】
  20. 为什么需要计算机语言?高级语言有哪些特点?

热门文章

  1. pop和push等使用方法,every和some、join
  2. PostgreSQL 递归查询 (转)
  3. java并发编程的艺术——第四章总结
  4. ThinPHP_5的请求和响应
  5. Ajax异步刷新,测试用户名是否被注册
  6. V-rep学习笔记:转动关节1
  7. 20200727每日一句
  8. 190310每日一句
  9. 181024词霸有道扇贝每日一句
  10. atitit knowmng知识管理 索引part2