现在,我正在尝试制作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()
答案 0 :(得分:1)
您不仅可以使用命令
RealImage CrossCorrelate( RealImage source1, RealImage source2 )
吗?
如果没有,您能跟我解释一下,与ZNCC到底有什么不同?
(请注意,您可以通过img -= mean(img)
轻松地将每个源图像移动到平均值为零)