dm-script中零均值归一化互相关的计算

时间:2018-07-02 09:34:25

标签: dm-script

现在,我正在尝试制作dm脚本,以计算两个图像之间的零均值标准化互相关(ZNCC)。在ZNCC的计算中,众所周知,FFT和积分图像的使用是相当有效的方案。因此,我编写了以下测试脚本来计算积分图像。但是,就我而言,这种计算对于相机图像的典型图像尺寸而言不够快。您有什么好主意来提高积分图像计算的计算速度吗?另外,有人知道一些用于快速ZNCC计算的脚本吗?我可以挑起你的大脑吗?

Image integralImg( Image &inputImg ){
    Number nx, ny
    Number iu, iv, tmpval, fval, integ_pre1, integ_pre2, integ_pre3
    Image integImg := inputImg.ImageClone()
    integImg.SetName("Integral Image of " + inputImg.GetName())
    inputImg.GetSize(nx, ny)
    fval = inputImg.GetPixel(0, 0)
    integImg.SetPixel(0, 0, fval)
    FOR(iu = 1 ; iu < nx ; iu++){
        fval = inputImg.GetPixel(iu, 0)
        integ_pre1 = integImg.GetPixel(iu - 1, 0)
        integImg.SetPixel(iu, 0, fval + integ_pre1)
    }
    FOR(iv = 1 ; iv < ny ; iv++){
        fval = inputImg.GetPixel(0, iv)
        integ_pre2 = integImg.GetPixel(0, iv - 1)
        integImg.SetPixel(0, iv, fval + integ_pre2)
    }
    FOR(iv = 1 ; iv < ny ; iv++){
        FOR(iu = 1 ; iu < nx ; iu++){
            fval = inputImg.GetPixel(iu,iv)
            integ_pre1 = integImg.GetPixel(iu - 1, iv)
            integ_pre2 = integImg.GetPixel(iu, iv - 1)
            integ_pre3 = integImg.GetPixel(iu - 1, iv - 1)
            integImg.SetPixel(iu, iv, fval + integ_pre1 + integ_pre2 - integ_pre3)
        }
    }
    Return integImg
}
//
Number nx = 1024
Number ny = 1024
Image IMG := RealImage("test",4,nx,ny)
IMG = Random()
//
Image intIMG
intIMG := integralImg( IMG )
intIMG.ShowImage()

1 个答案:

答案 0 :(得分:1)

您不仅可以使用命令

RealImage CrossCorrelate( RealImage source1, RealImage source2 )吗?

如果没有,您能跟我解释一下,与ZNCC到底有什么不同? (请注意,您可以通过img -= mean(img)轻松地将每个源图像移动到平均值为零)