一、互相关简介

在这里我想探讨一下“互相关”中的一些概念。正如卷积有线性卷积(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期】相关推荐

  1. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

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

  2. 【条形码识别】基于matlab GUI二维条形码识别【含Matlab源码 607期】

    ⛄一.二维条形码识别简介 采用数字图像处理技术对二维条码进行识别, 是二维条形码识别中较常用的方法, 它在处理污损的条形码方面有光电识别方法无法比拟的优势.另外图像式识别方法对识别角度的要求没有光电识 ...

  3. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  4. 基于SSM的仓库管理系统(含完整源码+论文)

    后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...

  5. 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】

    ⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...

  6. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  7. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  9. 【图像修复】基于matlab损坏图像修复【含Matlab源码 731期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像修复]基于matlab损坏图像修复[含Matlab源码 731期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...

  10. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

最新文章

  1. ASP.NET 2.0的全球化与本地化之全球化
  2. 第九章 Libgdx内存管理
  3. qstandarditemmodel 重写data函数后无法实现拖拽_实现类似百度网盘上传的功能
  4. LeetCode每日打卡 - 汉明距离总和
  5. NYOJ995硬币找零(简单dp)
  6. 敏捷宣言 敏捷原则_学校可以敏捷吗?
  7. Oracle RAC 11.2.0.3 节点CRS无法启动报:no network hb 故障解决方法
  8. SpringSecurity入门
  9. Cisco AP1240多SSID配置简解
  10. PackageManager.getPackageSizeInfo||UserHandle.myUserId()
  11. Kepware三菱驱动连接轻松开启
  12. Detours框架实现原理探究
  13. 数据库索引到底是什么,是怎样工作的?
  14. 怎么用电脑录音,在电脑上录制音频的方法
  15. 全面认识痛风:症状、风险因素、发病机理及管理
  16. 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!
  17. idea永久激活教程:smirk:
  18. python操作实例_python_文件操作代码实例
  19. 对比分析高速传输和同步软件:Aspera 与 镭速(Raysync)
  20. 超实用的linux服务器vps测速脚本看看你的服务器到底跑多少带宽

热门文章

  1. 启动web项目卡在Initializing Spring root WebApplicationContext不动
  2. iphone中input标签会多出一块的解决办法
  3. centos 安装qrcode  二维码
  4. 部署和调优 2.1 squid正向代理
  5. 前端js、jQuery实现日期格式化、字符串格式化
  6. UILabel根据内容自动调整高度
  7. Flash 显示全景图
  8. 测试VGA12H直接写屏速度 V1.1
  9. 190725每日一句
  10. Python 和 C++实现 九九乘法表