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

Calculations of zero mean normalized cross-correlation in 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()

你能不能只用命令

RealImage CrossCorrelate( RealImage source1, RealImage source2 ) ?

如果不是,你能给我解释一下,ZNCC 到底有什么不同吗? (请注意,您可以通过 img -= mean(img)

轻松地将每个源图像移动到零平均值