以宽度为例,若峰值点(x,y)的x值在0到width/2之间,则判断为正向的移动,移动距离为x;若x值在width/2到width之间,则判断为逆向移动,移动距离为(x-width)。
在搜索配准点前,必须先把非相关峰(即(0,0)处)赋值为0,否则会影响正确的判断。当峰值小于一定值时(暂定0.002),我们认为找到的峰不是相关峰,而是噪声产生的峰,而此时相关峰和非相关峰重叠,在(0,0)处,场景偏移量判断为(0,0)。
void FindShift(float f,float g,int *shiftifft,int *xshift,int *yshift)
{
    int xl,xh,yl,yh;
    int i,j;
    int iidx,jidx;
    int max=0;
    xl=f-15;
    xh=f+15;
    yl=g-15;
    yh=g+15;
    if(xl<0)
    {
        xl=0;
        xh=30;
    }
    else if(xh>255)
    {
        xl=225;
        xh=255;
    }
    if(yl<0)
    {
        yl=0;
        yh=30;
    }
    else if(yh>255)
    {
        yl=225;
        yh=255;
    }
    for(i=yl;i<yh;i++)
    {
        for(j=xl;j<xh;j++)
        {
            if(shiftifft[512*i+2*j]>max)
            {
                max=shiftifft[512*i+2*j];
                jidx=j;
                iidx=i;
            }

        }
    }
    if(jidx>128)
    {
        jidx=jidx-256;
        jidx=(int)(1.25*jidx-0.5);
    }
    else
        jidx=(int)(1.25*jidx+0.5);
    if(iidx>128) iidx=iidx-256;
    *xshift=jidx;
    *yshift=iidx;
}
5.6  代码的优化
(1)简单的C代码调整
这一点和普通的C语言优化一样,调整你的代码达到以下效果:
-尽量减少不必要的变量
-尽量使用静态和全局变量
-尽量减少循环中的重复运算,将能重复利用的值在循环外部计算。
-不需要在代码中做的运算尽量拿掉,如x*5/4可调整为x*1.25
(2)使用内联函数
C6000编译器提供了许多内联函数,它们直接对应着汇编指令,可快速优化C代码。这些内联函数不易用C/C++语言实现其功能。内联函数用前下划线(_)特别标示,其方法与调用函数一样。例如:
float _rcpsp(float src)  计算浮点数的近似倒数;
float _rsqrsp(float src) 计算浮点数的近似平方根倒数;
(3)restrict关键字
为了帮助编译器确存储器的相关性,可以使用关键字restrict来限定指针、引用或数组。关键字restrict是对指针、引用或数组的一种限定。使用restrict关键字是为了确保其限定的指针在声明的范围内,是指向一个特定对象的惟一指针,即这个指针不会和其他指针指向存储器的同一地址。如果这个保证被违反,程序的执行结果将是未知的,这使编译器更容易确定是否有别名信息,从而更好得优化代码。
上一篇:渥拉斯顿棱镜透射光强扰动分析+文献综述
下一篇:含葡萄糖的混浊液后向散射特性的Mueller矩阵实验研究

基于大概念的初中科学教材分析力学相关部分

二三维一体化CAD系统中工...

基于初中科学实验教具的创新

基于landsat8遥感影像的水稻田降温效应研究

基于大概念的初中科学教材分析

FLUENT基于CFD圆柱绕流数值模拟研究

光波单向波导的设计与实现

10万元能开儿童乐园吗,我...

医院财务风险因素分析及管理措施【2367字】

承德市事业单位档案管理...

神经外科重症监护病房患...

AT89C52单片机的超声波测距...

公寓空调设计任务书

国内外图像分割技术研究现状

中国学术生态细节考察《...

C#学校科研管理系统的设计

志愿者活动的调查问卷表