Source code for monalisa.fourier._kf_conj
"""Port of src/fourier123/prep_function/bmKF_conj.m."""
import numpy as np
from monalisa._mat import isempty, single, vec
from monalisa.array._block_reshape import block_reshape
from monalisa.array._col_reshape import col_reshape
from monalisa.fourier._deapodization import deapodization
from monalisa.image._im_crop import im_crop
from monalisa.util._default_kernel import default_kernel
[docs]
def kf_conj(C_conj, N_u, n_u, dK_u, nCh, kernelType=None, nWin=None, kernelParam=None):
"""Deapodization times ``1/prod(dK_u)`` (times ``C_conj`` when given), for the
adjoint operator; column format ``[prod(n_u), nCh]``, single."""
kernelType, nWin, kernelParam = default_kernel(kernelType, nWin, kernelParam)
C_conj = None if isempty(C_conj) else single(block_reshape(C_conj, n_u))
N_u = single(vec(N_u))
n_u = single(vec(n_u))
dK_u = single(vec(dK_u))
K = single(deapodization(N_u, dK_u, single(nCh), kernelType, single(vec(nWin)), single(vec(kernelParam))))
K = im_crop(K, N_u, n_u)
K = single(col_reshape(K, n_u))
F_conj = np.float32(1.0 / np.float64(np.prod(dK_u)))
if C_conj is None:
return single(K * F_conj)
C_conj = single(col_reshape(C_conj, n_u))
return single(K * F_conj * C_conj)