精华内容
下载资源
问答
  • 互相关算法
    千次阅读
    2019-09-22 23:56:53

    原文地址:http://blog.csdn.net/fengbingchun/article/details/5857810

    在用Harris算子对图像进行角点提取后,两幅图像得到的角点个数不一定相等,这时就要先对它们进行处理,得出一一对应的角点对。

    归一化互相关(Normalized Cross Correlation method, NCC)匹配算法是一种经典的统计匹配算法,通过计算模板图像和匹配图像的互相关值,来确定匹配的程度。

    互相关最大时的搜索窗口位置决定了模板图像在待匹配图像中的位置。

    它是一个亮度、对比度线性不变量。

    此算法的缺点是参与运算的特征点比较多,运算速度比较慢。

    归一化互相关应用在对图像特征点进行初始匹配时执行步骤大体为:

    (1)、原图像 - 测试图像经过平均平滑滤波的图像;

    (2)、利用(1)中的结果,产生归一化互相关矩阵;

    (3)、根据产生的归一化互相关矩阵,得出每行、每列(每幅图像中一点相对于另一幅图像中所有对应点)的最大值及相应索引;

    (4)、由(3)结果,如两图像对应点索引一致,则为一对初始匹配点对;

    (5)、由(4)循环求出一一匹配的点对。

     

        初始匹配完成。

    更多相关内容
  • 对时差法超声波流量检测...并以λ型超声波流量检测方法中的三步互相关算法为例,将整体运算时间控制在ms级,达到了实时性要求,为Z型、V型等时差法超声波流量检测的互相关算法大幅度减少计算量提供了一种有效的解决方案。
  • 互相关算法在多传感器测量仪器中有重要用途,FFT算法可以用于加速互相关计算,尤其在序列点数较大的时候,FFT计算互相关的速度优势明显。然而即便如此,FFT计算对于CPU的速度要求仍然很高。直接计算FFT一般需要使用...
  • 根据模板和全局最优子图的特点及其相互关系给出2个判据,对归一化互相关算法进行了改进.首先计算模板自相关值,再利用快速傅里叶变换方法计算互相关矩阵,利用第1个判据大幅缩小可能解的范围,减少匹配时间,然后利用第2...
  • 线结构光三维测量中,光条中心点提取的准确度和精度直接影响最终测量结果的精确度。针对现有激光条纹中心提取方法抗...同当前算法相比,互相关算法简单实用、稳健性好、抗噪声能力强,且对断线条纹具有很强的修补能力。
  • DSP库互相关算法实现与MATLAB互相关算法比较互相关算法原理开发板实现互相关算法离散傅里叶变换(DFT)与离散傅里叶反变换(IDFT)DFT旋转因子的计算IDFT旋转因子的计算FFT变换函数和IFFT变换函数DSP结果与MATLAB...

    互相关算法原理

    为了实现声源定位,需要求出阵列之间的时延信息,常用的方式就是互相关算法。因为定位系统需要机动灵活的特性的特性,互相关算法的实现不能完全依赖于PC端软件,所以本文尝试了基于开发板DSP库的互相关算法实现。
    图一 基于麦克风阵列的声源定位系统框图

    互相关时延估计是一种最基本的时延估计算法,对接收到的两个声源信号进行互相关运算,互相关函数最大值对应两个声源信号到达麦克风的时间差τ。设x_o (n)和x_i (n)分别为FM参考传感器和麦克风i(i取1,2,3,4)接收到的信号,则他们之间的互相关为:
    公式1互相关
    对互相关公式1做FFT变换得:
    公式2FFT变换
    再对FFT变换公式2做IFFT变换得:
    公式3IFFT变换
    综上所述,得出互相关算法的流程图如下:
    图2 互相关算法流程图
    按照上述原理对音频信号做matlab的仿真,仿真条件如下
    假设已知信号为起始频率为250Hz,终止频率为2000Hz的Chirp信号,接收信号为麦克风利用ADC采集到的在幅度上有一定衰减的Chirp信号。

    %%% 互相关法求时延 %%%
    N=2048;             % 长度
    Fs=10000;           % 采样频率
    n=0:N-1;
    t=n/Fs;             % 时间序列
    %% Chirp信号
    x = chirp(t,250,0.2047,2000);
    x = [x,zeros(1,2*N)];
                        % 要保证时延在两倍信号长度之内,不然就调整2*N的2
    %% 接收到的Chirp信号
    ADC1 = 0.78 * chirp(t,250,0.2047,2000);
                        % 接收后的信息假设存在幅度衰减
    tao = 0.15;         % 延时
    Ndelay = fix(tao*Fs);
                        % 换算成延时点数
    ADC1 = [zeros(1,Ndelay),ADC1,zeros(1,length(x)-Ndelay-length(ADC1))];%,zeros(1,2048)];
    %% 互相关函数
    [c,lags]=xcorr(x,ADC1);
                       % 互相关
    subplot(211);
    xaxis = 1:1:length(x);
    plot(xaxis,x,'r');
    hold on;
    plot(xaxis,ADC1,':');
    legend('x信号', 'ADC1信号');
    xlabel('时间/s');ylabel('x(t) ADC1(t)');
    title('原始信号');grid on;
    hold off
    subplot(212);
    plot(lags/Fs,c,'r');
    title('相关函数');
    xlabel('时间(s)');ylabel('Rxadc1');
    grid on
    [Am,Lm]=max(c);
    d = Lm - (length(c)+1)/2;
    phy=(2*10*d*180/Fs);
    phy = rem(phy,360)% 取余360
    phy =
      -180
    Delay=d/Fs
    Delay =
       -0.1500
    

    仿真结果如下:

    matlab互相关算法求解输出结果

    开发板实现互相关算法

    离散傅里叶变换(DFT)与离散傅里叶反变换(IDFT)

    由DFT和IDFT的公式可知:
    公式4 DFT和公式5 IDFT
    将公式4和公式5写成矩阵形式如下:
    公式6 DFT矩阵形式和公式7 IDFT矩阵形式
    公式4和公式5中的W为旋转因子,只是DFT和IDFT的旋转因子W是共轭的,所以对于DFT和IDFT,都相当于进行了旋转因子不同的DFT运算,由欧拉公式可知:
    欧拉公式

    DFT旋转因子的计算

    void tw_gen(float *w, int n)
    {
        int i, j, k;
        const double PI = 3.141592654;
        for (j = 1, k = 0; j <= n >> 2; j = j << 2) {
            for (i = 0; i < n >> 2; i += j) {
                w[k]     = (float) sinsp (2 * PI * i / n);
                w[k + 1] = (float) cossp (2 * PI * i / n);
                w[k + 2] = (float) sinsp (4 * PI * i / n);
                w[k + 3] = (float) cossp (4 * PI * i / n);
                w[k + 4] = (float) sinsp (6 * PI * i / n);
                w[k + 5] = (float) cossp (6 * PI * i / n);
                k += 6;
            }
        }
    }
    

    IDFT旋转因子的计算

    根据欧拉公式,只需要对DFT的旋转因子做共轭变换即可。

    void tw_geni(float *w, int n)
    {
        int i, j, k;
        const double PI = 3.141592654;
        for (j = 1, k = 0; j <= n >> 2; j = j << 2) {
            for (i = 0; i < n >> 2; i += j) {
                w[k]     = (float) cossp (2 * PI * i / n);
                w[k + 1] = (float) -sinsp (2 * PI * i / n);
                w[k + 2] = (float) cossp (4 * PI * i / n);
                w[k + 3] = (float) -sinsp (4 * PI * i / n);
                w[k + 4] = (float) cossp (6 * PI * i / n);
                w[k + 5] = (float) -sinsp (6 * PI * i / n);
                k += 6;
            }
        }
    }
    

    FFT变换函数和IFFT变换函数

    void FFT(float *Input, float *Cmo, int Tn)
    {
        int i;
        int rad;
        if(Tn==16 || Tn==64 || Tn==256 || Tn==1024 || Tn==4096 || Tn==16384 || Tn==65536) {
            rad=4;
        } else if(Tn==8 || Tn==32 || Tn==128 || Tn==512 || Tn==2048 || Tn==8192 || Tn==32768 || Tn==131072) {
            rad=2;
        } else {
            return;
        }
    
        for(i=0;i<Tn;i++) {
            CFFT_In[2*i]=Input[i];
            CFFT_In[2*i+1]=0;
        }
    
        tw_gen(Cw,Tn);
    
        DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);
    
        for(i=0;i<Tn;i++) {
            if(i==0) {
                Cmo[i]=sqrtsp(CFFT_Out[2*i]*CFFT_Out[2*i]+CFFT_Out[2*i+1]*CFFT_Out[2*i+1])/Tn;
            } else {
                Cmo[i]=sqrtsp(CFFT_Out[2*i]*CFFT_Out[2*i]+CFFT_Out[2*i+1]*CFFT_Out[2*i+1])*2/Tn;
            }
        }
    }
    
    void IFFT(float *Input, float *Cmo, int Tn)
    {
        int i;
        int rad;
        if(Tn==16 || Tn==64 || Tn==256 || Tn==1024 || Tn==4096 || Tn==16384 || Tn==65536) {
            rad=4;
        } else if(Tn==8 || Tn==32 || Tn==128 || Tn==512 || Tn==2048 || Tn==8192 || Tn==32768 || Tn==131072) {
            rad=2;
        } else {
            return;
        }
    
        for(i=0;i<Tn;i++) {
            CIFFT_In[2*i]=Input[i];//瀹為儴
            CIFFT_In[2*i+1]=0;//铏氶儴
        }
    
        tw_geni(CwI,Tn);
    
        DSPF_sp_fftSPxSP(Tn,CIFFT_In,CwI,CIFFT_Out,brev,rad,0,Tn);
    
        for(i=0;i<Tn*2;i++)
        {
            Cmo_IFFTOut[i]=CIFFT_Out[i]/Tn;
        }
    
     /*   for(i=0;i<Tn;i++)
        {
            Cmo_IFFTOut[2*i]= Cmo_IFFTOut[2*i];//瀹為儴
            Cmo_IFFTOut[2*i+1]=-Cmo_IFFTOut[2*i+1];//铏氶儴
        }*/
        for(i=0;i<Tn;i++)
        {
            if(i==0)
            {
                Cmo[i]=sqrtsp(Cmo_IFFTOut[2*i]*Cmo_IFFTOut[2*i]+Cmo_IFFTOut[2*i+1]*Cmo_IFFTOut[2*i+1]);
            }
            else
            {
                Cmo[i]=sqrtsp(Cmo_IFFTOut[2*i]*Cmo_IFFTOut[2*i]+Cmo_IFFTOut[2*i+1]*Cmo_IFFTOut[2*i+1]);
            }
        }
    }
    

    DSP结果与MATLAB结果比较

    本文利用host端产生两个频率叠加正弦信号(4096点):

      for(j = 0; j < PAYLOADSIZE; j++) {
            dataIn[j] = sin (2 * 3.1415 * 50 * j / (double) PAYLOADSIZE);
        }
    

    DSP处理完成后发给host端,host端将结果存入文件中以进行后续处理。

    close all;
    clear;
    clc;
    time_txt = textread('C:\Users\lenovo\Desktop\TimeData');
    fft_txt = textread('C:\Users\lenovo\Desktop\FFTData');
    ifft_txt = textread('C:\Users\lenovo\Desktop\IFFTData');
    rfft_txt = textread('C:\Users\lenovo\Desktop\RFFTData');
    
    fft_local=2*(abs((fft(time_txt))))/4096;
    ifft_local = abs((ifft(time_txt)));
    LEN = 4096;
    figure;
    subplot(211);
    plot(0:1:LEN-1,fft_txt(1:1:LEN));
    title('DSP FFT')
    subplot(212);
    plot(0:1:LEN-1,fft_local(1:1:LEN));
    title('MATLAB FFT')
    figure;
    subplot(211);
    plot(0:1:LEN-1,ifft_txt(1:1:LEN));
    title('DSP IFFT')
    subplot(212);
    plot(0:1:LEN-1,ifft_local(1:1:LEN));
    title('MATLAB IFFT')
    
    
    X1=(fft(time_txt));
    X2=(fft(time_txt));
    Sxy=X1.*conj(X2);
    Bxy=fftshift(abs(ifft(Sxy)));
    figure;
    subplot(211);
    plot((rfft_txt));
    title('DSP hxg')
    subplot(212);
    plot((Bxy));
    title('MATLAB hxg')
    [max,location]=max(Bxy);
    %d=location-N/2-1        
    % d=location-4096
    % Delay=d/Fs              %求得时间延迟
    % Xxy=xcorr(time_txt,time_txt);
    % plot(Xxy);
    figure;
    DSS=rfft_txt-Bxy;
    plot(DSS);
    axis([0 4096-1 -1 1]);
    

    FFT结果比较
    IFFT结果比较
    互相关结果比较
    DSP互相关结果和MATLAB互相关结果作差比较

    LFM线性调频信号的互相关结果比较

    利用matlab生成线性调频信号,并将信号保存到文件中。

    fs = 1000;
    T = 5;
    B = 10;
    k = B / T;
    n = round(T * fs);
    t = linspace(0,T,n);
    y = exp(1j*pi*k*t.^2);
    figure;
    plot(t,y);
    xlabel('t/s');
    ylabel('幅度');
    X1=(fft(y));
    X2=(fft(y));
    Sxy=X1.*conj(X2);
    Bxy=fftshift(abs(ifft(Sxy)));
    figure;
    plot((Bxy));
    fid = fopen('C:\Users\lenovo\Desktop\lfmDATA','a');
    for jj = 1:1:4096
      fprintf(fid,'%f\r\n',y(1,jj));  
    end
    fclose(fid)
    

    生成后的线性调频信号时域波形如下:
    线性调频信号时域波形
    通过上述算法对线性调频信号进行互相关运算得出结果如下:
    线性调频信号进行互相关运算比较

    数据及所有程序工程算法资料下载

    数据及所有程序工程算法资料索引
    点击数据及所有程序工程算法资料下载

    展开全文
  • 一种改进的PIV互相关算法.doc
  • 随机信号的统计特性测试,均值、方差,相关函数(包括自相关、互相关函数)、频谱及功率谱密度算法.
  • 精确的互相关算法在超声波流速测量中的应用.pdf
  • 参考资料-精确的互相关算法在超声波流速测量中的应用.zip
  • 针对粒子图像测速(particle i mage velocimetry,PI V)技术中互相关算法运算量巨大的问题,提出了一种改进的基于快速傅里叶变换(FFT )的互相关算法.改进算法根据频域抽取原理,设置相关窗口重叠率为50 %,重叠窗口一个...
  • 分别利用互相关函数和互相关系数测试了不同浓度的酒精溶液,测试结果显示,互相关函数峰值可以作为一种测量液体浓度的方法,酒精溶液的测量精度达到3.4%,而互相关系数法可以甄别不同浓度的酒精溶液,最小系数在60%以下。
  • #资源达人分享计划#
  • 归一化互相关算法

    千次阅读 2018-10-18 16:35:45
    function C=corr(image,template) [mi,ni]=size(image); [mt,nt]=size(template); C=zeros(mi-mt+1,ni-nt+1); for u=1:mi-mt+1 for v=1:ni-nt+1 a=0; b=0; c=0; for i=1:mt ...算法公式为:
    function C=corr(image,template)
        [mi,ni]=size(image);
        [mt,nt]=size(template);
        C=zeros(mi-mt+1,ni-nt+1);
        for u=1:mi-mt+1 
            for v=1:ni-nt+1
                a=0;
                b=0;
                c=0;
                for i=1:mt
                    for j=1:nt
                        a=a+image(i+u-1,j+v-1)*template(i,j);
                        b=b+image(i+u-1,j+v-1)*image(i+u-1,j+v-1);
                        c=c+template(i,j)*template(i,j);
                    end
                end
                b=sqrt(b);
                c=sqrt(c);
                C(u,v)=a/(b*c);
            end
        end
    end
    

    S为实际图像,T为参考图像。

    算法公式为:S为实际图像,T为参考图像

    展开全文
  • 基于互相关算法的声源定位分析,张明瀚,石为人,时延估计是阵列信号处理中的一项关键技术。针对室内视频监控系统对声源定位技术的需求,本文对广义互相关算法中基本互相关、互功
  • 为实现亚像素运动矢量的精确估计,探讨一种基于核回归修正的梯度互相关精确运动估计算法。引入优化滤波中心差分估计器计算图像梯度;基于矩阵相乘离散傅里叶变换方法快速计算上采样梯度互相关函数,以该函数的峰值...
  • 分别利用互相关函数和互相关系数测试了不同浓度的酒精溶液,测试结果显示,互相关函数峰值可以作为一种测量液体浓度的方法,酒精溶液的测量精度达到3.4 %,而互相关系数法可以甄别不同浓度的酒精溶液,最小系数在60%...
  • 各位大佬,怎么用互相关函数 分块,求出最大位移。并做出运动矢量图啊? 有两个不同时刻的图片,然后勇互相关函数求出移动,并画到图上,跟下面似的, 图1和图2是两个不同时刻的图片。经过上面的方法计算后得出每...
  • 首先是采用传统的空间几何变换处理配准的反射图像进行预处理,然后使用归一化互相关算法提取基准图像和待处理实验结果显示,这种改进能够提高配准的速度,并且在一定程度上确保了配准的精度。
  • 互相关运算函数,供脚本调用,输出为输入信号之间的互相关函数,要求输入值为两个互不相同的有限矩阵
  • 归一化互相关匹配算法

    千次阅读 2019-09-24 11:11:39
    1.归一化互相关匹配 ...2.图像匹配—NCC算法,即归一化互相关匹配 https://blog.csdn.net/qq_32261049/article/details/78666654 3.图像处理之积分图应用三(基于NCC快速相似度匹配算法) https://blog....

    1.归一化互相关匹配

    https://blog.csdn.net/u013049912/article/details/85984238

    2.图像匹配—NCC算法,即归一化互相关匹配

    https://blog.csdn.net/qq_32261049/article/details/78666654

    3.图像处理之积分图应用三(基于NCC快速相似度匹配算法)

    https://blog.csdn.net/fangyan90617/article/details/101269473

    4.图像处理之基于NCC模板匹配识别

    https://blog.csdn.net/weixin_34208185/article/details/89936381
    5.图像匹配之归一化积相关灰度匹配

    https://blog.csdn.net/cui134/article/details/23924303

    6.双目立体匹配流程——归一化互相关(NCC)

    https://blog.csdn.net/aaronmorgan/article/details/79121434

    展开全文
  • STM32的傅里叶算法

    2018-09-03 15:54:22
    用STM32系列芯片做傅里叶变换的算法和程序,希望对大家有帮助
  • 传统的超声波测深算法只能在较高信噪比环境下进行有效测量,针对较深...通过理论推导的方式证明了编码互相关算法具有良好的抗干扰性能,经过仿真论证了编码互相关在测深方面的优势,并在实验中验证了该算法的可行性。
  • 针对传统自适应滤波算法对于非零均值非高斯噪声干扰环境下稀疏系统参数估计存在稳态精度低的问题,以变中心互相关熵为代价函数,引入比例更新机制,应用随机梯度法设计一种新的稀疏自适应滤波算法。变中心互相关熵的...
  • c语言实现互相关.doc

    2020-12-01 10:17:58
    #include <stdio.h> #include <stdlib.h> #include <math.h> #define NN 10 void xcorr(float *r, unsigned short *x, unsigned short *y, int N; int main) { unsigned short x[10]={1,1,2,2,3,4,5,6,7,8};...
  • 在声音测距的原理中,我们可以利用麦克风对采集的声音信号利用互相关算法测出音源与麦克风距离的差值,而大致求出音源的方位。这也是第十五届智能车竞赛声音信标组定位的基础,因为我参加的是这个组别,所以当时在这...
  • 采用积分图算法的归一化互相关匹配,大大减少了计算时间。
  • 改进的互相关虹膜匹配算法.pdf
  • 互相关C语言程序xcorr

    2020-11-23 16:30:13
    用C编的互相关程序,与matlab中的xcorr相对应,correlation

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,425
精华内容 7,770
关键字:

互相关算法

友情链接: lame-3.100.rar