【图像配准】基于matlab GUI互相关图像配准【含Matlab源码 853期】
一、互相关简介
在这里我想探讨一下“互相关”中的一些概念。正如卷积有线性卷积(linear convolution)和循环卷积(circular convolution)之分;互相关也有线性互相关(linear cross-correlation)和循环互相关(circular cross-correlation)。线性互相关和循环互相关的基本公式是一致的,不同之处在于如何处理边界数据。其本质的不同在于它们对原始数据的看法不同。通过这篇文章,我想整理一下相关概念,并给出示例。
1 线性相关(Linear Cross-Correlation)的定义和计算
用一个实际的应用例子来验证一下吧。如图3的第一个子图表示雷达声纳发射了一个探测信号。经过一段时间之后,收到了如图3的第二个子图所示的回波(带有一定的噪声)。此时我们关注的是如何确定回波中从何时开始是对探测信号的响应,以便计算目标距雷达的距离,这就需要用到线性互相关。在第三个子图中的‘Valid’曲线即是有效互相关数据,其中清晰地呈现出两处与探测信号相似的回波的位置。
线性互相关中,还有一些概念值得注意:
1 补零。由线性相关的计算式不难发现,为了计算出个完整的相关系数序列(包含那些“无效数据”在内的所有结果),需要用到一些“不存在”的点。这就需要人为地对这些值进行补充,在线性相关的计算中,对这些超出原始数据储存的区域取值为零。
2 末端效应。由图1可以发现,一头一尾的个互相关数据并没有完全“嵌入”两个原始数组的全部信息,它们或多或少地受到了人为补零的影响。因此一般认为这些数据是不可用的。
3 计算模式的选择。这个问题其实是由问题二衍生而来的,就Python语言中的函数而言,至少有两个可以直接计算线性相关:
2 循环互相关(Circular Cross-Correlation)的定义和计算
二、部分源代码
function varargout = xiangguan(varargin)
% XIANGGUAN M-file for xiangguan.fig
% XIANGGUAN, by itself, creates a new XIANGGUAN or raises the existing
% singleton*.
%
% H = XIANGGUAN returns the handle to a new XIANGGUAN or the handle to
% the existing singleton*.
%
% XIANGGUAN('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in XIANGGUAN.M with the given input arguments.
%
% XIANGGUAN('Property','Value',...) creates a new XIANGGUAN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before xiangguan_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to xiangguan_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% Edit the above text to modify the response to help xiangguan% Last Modified by GUIDE v2.5 20-Apr-2014 10:31:06% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @xiangguan_OpeningFcn, ...'gui_OutputFcn', @xiangguan_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 xiangguan is made visible.
function xiangguan_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 xiangguan (see VARARGIN)% Choose default command line output for xiangguan
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes xiangguan wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = xiangguan_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 first_picture.
function first_picture_Callback(hObject, eventdata, handles)
% hObject handle to first_picture (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
subplot(3,3,2)
[filename,pathname]=uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...'*.*','All Files' },'open'); %打开路径下要检索的图像
if isequal([filename,pathname],[0,0])return
else%读取图片pic = fullfile(pathname,filename);global onion;onion = imread(pic);imshow(onion);
end% --- Executes on button press in second_picture.
function second_picture_Callback(hObject, eventdata, handles)
% hObject handle to second_picture (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)subplot(3,3,3)
[filename,pathname]=uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...'*.*','All Files' },'open'); %打开路径下要检索的图像
if isequal([filename,pathname],[0,0])return
else%读取图片pict = fullfile(pathname,filename);global peppers;peppers = imread(pict);imshow(peppers);
end% --- Executes on button press in correlation.
function correlation_Callback(hObject, eventdata, handles)
% hObject handle to correlation (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
subplot(3,3,5)
global onion;
global peppers;
% non-interactively
rect_onion = [111 33 65 58];
rect_peppers = [163 47 143 151];
sub_onion = imcrop(onion,rect_onion);
sub_peppers = imcrop(peppers,rect_peppers);
c = normxcorr2(sub_onion(:,:,1),sub_peppers(:,:,1));surf(c), shading flat% --- Executes on button press in overlay.
function overlay_Callback(hObject, eventdata, handles)
% hObject handle to overlay (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
subplot(3,3,6)
global onion;
global peppers;
% non-interactively
rect_onion = [111 33 65 58];
rect_peppers = [163 47 143 151];
sub_onion = imcrop(onion,rect_onion);
sub_peppers = imcrop(peppers,rect_peppers);
c = normxcorr2(sub_onion(:,:,1),sub_peppers(:,:,1));% offset found by correlation
[max_c, imax] = max(abs(c(:)));
[ypeak, xpeak] = ind2sub(size(c),imax(1));
corr_offset = [(xpeak-size(sub_onion,2)) (ypeak-size(sub_onion,1))];
% relative offset of position of subimages
rect_offset = [(rect_peppers(1)-rect_onion(1)) (rect_peppers(2)-rect_onion(2))];
% total offset
offset = corr_offset + rect_offset;
xoffset = offset(1);
yoffset = offset(2);
xbegin = round(xoffset+1);
xend = round(xoffset+ size(onion,2));
ybegin = round(yoffset+1);
yend = round(yoffset+size(onion,1));
% extract region from peppers and compare to onion
extracted_onion = peppers(ybegin:yend,xbegin:xend,:);
if isequal(onion,extracted_onion) disp('onion.png was extracted from peppers.png')
end
recovered_onion = uint8(zeros(size(peppers)));
recovered_onion(ybegin:yend,xbegin:xend,:) = onion;
imshow(recovered_onion)% --- Executes on button press in transparent.
function transparent_Callback(hObject, eventdata, handles)
% hObject handle to transparent (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
subplot(3,3,8)
global onion;
global peppers;
% non-interactively
rect_onion = [111 33 65 58];
rect_peppers = [163 47 143 151];
sub_onion = imcrop(onion,rect_onion);
sub_peppers = imcrop(peppers,rect_peppers);
c = normxcorr2(sub_onion(:,:,1),sub_peppers(:,:,1));% offset found by correlation
[max_c, imax] = max(abs(c(:)));
[ypeak, xpeak] = ind2sub(size(c),imax(1));
corr_offset = [(xpeak-size(sub_onion,2)) (ypeak-size(sub_onion,1))];
% relative offset of position of subimages
rect_offset = [(rect_peppers(1)-rect_onion(1)) (rect_peppers(2)-rect_onion(2))];
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]谢凤英,姜志国.基于互相关的显微医学图像配准[J].中国体视学与图像分析. 2001,(03)
【图像配准】基于matlab GUI互相关图像配准【含Matlab源码 853期】相关推荐
- 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...
- 【条形码识别】基于matlab GUI二维条形码识别【含Matlab源码 607期】
⛄一.二维条形码识别简介 采用数字图像处理技术对二维条码进行识别, 是二维条形码识别中较常用的方法, 它在处理污损的条形码方面有光电识别方法无法比拟的优势.另外图像式识别方法对识别角度的要求没有光电识 ...
- 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】
⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...
- 基于SSM的仓库管理系统(含完整源码+论文)
后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...
- 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】
⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...
- matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...
一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
- 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】
一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...
- 【图像修复】基于matlab损坏图像修复【含Matlab源码 731期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像修复]基于matlab损坏图像修复[含Matlab源码 731期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...
- 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...
最新文章
- ASP.NET 2.0的全球化与本地化之全球化
- 第九章 Libgdx内存管理
- qstandarditemmodel 重写data函数后无法实现拖拽_实现类似百度网盘上传的功能
- LeetCode每日打卡 - 汉明距离总和
- NYOJ995硬币找零(简单dp)
- 敏捷宣言 敏捷原则_学校可以敏捷吗?
- Oracle RAC 11.2.0.3 节点CRS无法启动报:no network hb 故障解决方法
- SpringSecurity入门
- Cisco AP1240多SSID配置简解
- PackageManager.getPackageSizeInfo||UserHandle.myUserId()
- Kepware三菱驱动连接轻松开启
- Detours框架实现原理探究
- 数据库索引到底是什么,是怎样工作的?
- 怎么用电脑录音,在电脑上录制音频的方法
- 全面认识痛风:症状、风险因素、发病机理及管理
- 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!
- idea永久激活教程:smirk:
- python操作实例_python_文件操作代码实例
- 对比分析高速传输和同步软件:Aspera 与 镭速(Raysync)
- 超实用的linux服务器vps测速脚本看看你的服务器到底跑多少带宽