pisco#
- mrinufft.extras.pisco(traj: NDArray, shape: tuple[int, ...], kspace_data: NDArray, backend: str, density: NDArray | None = None, max_iter: int = 10, calib_width: int | tuple[int, ...] = 24, kernel_size: int | tuple[int, ...] = 7, kernel_shape: str = 'ellipsoid', thresh: float = 0.05, crop: float = 0.08, decim: int = 1, power_iter: int = 30) NDArray[source]#
PISCO algorithm on non-Cartesian data.
- Parameters:
traj (numpy.ndarray) – The trajectory of the samples.
shape (tuple) – The shape of the image.
kspace_data (numpy.ndarray) – The k-space data.
threshold (float, or tuple of float, optional) – The threshold used for extracting the k-space center. By default it is 0.1
backend (str) – The backend used for the operator.
density (numpy.ndarray, optional) – The density compensation weights.
max_iter (int, optional) – The max iterations for internal pinv computations
calib_width (int or tuple of int, default 24.) – The calibration region width.
decim (int, default 1.) – The decimation factor for the calculation of sensitivity maps. This can be used to speed up the computation and significantly reduce memory usage. The final result is upsampled back to the original size through periodic sinc interpolation.
kernel_size (int or tuple of int, default 7.) – Side length of the k-space calibration kernel along each dimension (for an ellipsoidal kernel, the ellipsoid inscribed in this box is used).
kernel_shape ("ellipsoid" or "rect", default "ellipsoid".) – The shape of the k-space calibration kernel. “ellipsoid” drops the corners of the rectangular support for reduced cost at negligible accuracy cost.
thresh (float, default 0.05) – Relative threshold (w.r.t. the largest singular value) on the calibration matrix’s singular values used to select its subspace: for ESPIRiT, singular vectors above thresh are kept (signal subspace); for PISCO, singular vectors below thresh are kept (nullspace). Raising thresh therefore widens the retained subspace for PISCO but narrows it for ESPIRiT.
crop (float, default 0.08) – Threshold on the gap between the local coil-covariance matrix’s extreme (normalized) eigenvalue at each voxel x and its ideal value within the image support – the largest eigenvalue and its ideal value of 1 for ESPIRiT, the smallest eigenvalue and its ideal value of 0 for PISCO: x is considered outside the support (and masked out) when this gap exceeds crop.
power_iter (int, default 30) – Number of (batched) power iterations used to extract the min or max eigenvector of the local coil-covariance matrices.
- Returns:
Smaps – The sensitivity maps.
- Return type:
References
Uecker M, Lai P, Murphy MJ, Virtue P, Elad M, Pauly JM, Vasanawala SS, Lustig M. ESPIRiT–an eigenvalue approach to autocalibrating parallel MRI: where SENSE meets GRAPPA. Magn Reson Med. 2014 Mar;71(3):990-1001. doi: 10.1002/mrm.24751. PMID: 23649942; PMCID: PMC4142121.
R. A. Lobos, C.-C. Chan, J. P. Haldar. New Theory and Faster Computations for Subspace-Based Sensitivity Map Estimation in Multichannel MRI. IEEE Transactions on Medical Imaging 43:286-296, 2024. doi: 10.1109/TMI.2023.3299599.
MATLAB implementation ralobos/PISCO
Note
This function uses
numpyfor all CPU arrays, andcupyfor all on-gpu array. It will convert all its array argument to the respective array library. The outputs will be converted back to the original array module and device.See also
This function is part of the smaps registry,
get_smaps(). You can find other registered functions in this registry below:Key
Function
"low_frequency""espirit""pisco"