Source code for monalisa.image._im_laplace_equation_solver

"""Port of src/image123/bmImLaplaceEquationSolver.m."""

import numpy as np

from monalisa.image._im_laplace_iterator import im_laplace_iterator
from monalisa.image._im_laplacian import im_laplacian


[docs] def im_laplace_equation_solver(imStart, m, nIter, L_th, omp_flag=None, nBlockPerThread=None): """Harmonic extension of ``imStart`` outside the mask ``m``: blocks of ``nIter`` iterations until the relative Laplacian norm outside ``m`` is below ``L_th``.""" m_neg = ~np.ravel(np.asarray(m, dtype=bool), order="F") out = imStart while True: out = im_laplace_iterator(out, m, nIter, omp_flag, nBlockPerThread) L = im_laplacian(out) L_squared_norm = np.sum(np.abs(np.ravel(L, order="F")[m_neg]) ** 2) im_squared_norm = np.sum(np.abs(np.ravel(out, order="F")[m_neg]) ** 2) r = np.sqrt(L_squared_norm / im_squared_norm) if not r > L_th: return out