完整的代码是可用的here,并执行维纳反褶积。总之,以下是几行:
psf /= psf.sum()
psf_pad = np.zeros_like(img)
kh, kw = psf.shape
psf_pad[:kh, :kw] = psf #1
PSF = cv2.dft(psf_pad, flags=cv2.DFT_COMPLEX_OUTPUT, nonzeroRows = kh)
PSF2 = (PSF**2).sum(-1) #2
iPSF = PSF / (PSF2 + noise)[...,np.newaxis] #3
RES = cv2.mulSpectrums(IMG, iPSF, 0)
res = cv2.idft(RES, flags=cv2.DFT_SCALE | cv2.DFT_REAL_OUTPUT )
psf
和psf_pad
是numpy数组。在
我用#number
注意到了我不理解的行。在
我认为这些台词的作用是:
第1行:psf_pad[:kh, :kw] = psf
:
这一行似乎用psf
2D数组填充psf_pad
的开头。在
第2行:PSF2 = (PSF**2).sum(-1)
:
从我所读到的,带有-1
参数的sum
函数是调用它的矩阵的行和。
所以我想OpenCV的等价物一定是^{
第3行:iPSF = PSF / (PSF2 + noise)[...,np.newaxis]
:
这个我真的不明白,它似乎改变了阵列。但我不太明白。在
谢谢你的帮助。在
目前没有回答
相关问题 更多 >
编程相关推荐