Source code for histomicstk.utils.del2

import numpy as np


[docs] def del2(im_input): """Discrete Laplacian with edge-value extrapolation. Calculates the discrete Laplacian of an input image. Edge values are calculated by using linear extrapolation of second differences. This is consistent with the way that Matlab calculates the discrete Laplacian. Parameters ---------- im_input : array_like A floating-point intensity image. Returns ------- im_lap : array_like The discrete Laplacian of im_lap. See Also -------- histomicstk.segmentation.level_set.reg_edge """ # initialize output im_lap = np.zeros(im_input.shape) # process rows first D = np.diff(im_input, axis=0) S = np.zeros(im_input.shape) S[1:-1, :] = (D[1:, :] - D[0:-1, :]) / 2 if im_input.shape[0] > 3: S[0, :] = 2 * S[1, :] - S[2, :] S[-1, :] = 2 * S[-2, :] - S[-3, :] elif im_input.shape[0] == 3: S[0, :] = S[1, :] S[-1, :] = S[1, :] else: S[0, :] = 0 S[-1, :] = 0 im_lap += S # process columns D = np.diff(im_input, axis=1) S = np.zeros(im_input.shape) S[:, 1:-1] = (D[:, 1:] - D[:, 0:-1]) / 2 if im_input.shape[1] > 3: S[:, 0] = 2 * S[:, 1] - S[:, 2] S[:, -1] = 2 * S[:, -2] - S[:, -3] elif im_input.shape[1] == 3: S[0, :] = S[:, 1] S[:, -1] = S[:, 1] else: S[:, 0] = 0 S[:, -1] = 0 im_lap += S return im_lap / 2