I had the following codes that use Python and OpenCV. In short, I have a stack of images made with different focal depths. Codes select pixels at each position (x, y), which has the largest Laplacian of the Guass reaction among all focal depths (z), thus creating an image with focal glass. The function get_fmapcreates a 2d array in which each pixel will contain the number of the focal plane having the largest log response. In the following codes, the lines that are commented out are my current implementation of VIPS. They do not look compatible in defining a function, since this is only a partial solution.
def get_log_kernel(siz, std):
x = y = np.linspace(-siz, siz, 2*siz+1)
x, y = np.meshgrid(x, y)
arg = -(x**2 + y**2) / (2*std**2)
h = np.exp(arg)
h[h < sys.float_info.epsilon * h.max()] = 0
h = h/h.sum() if h.sum() != 0 else h
h1 = h*(x**2 + y**2 - 2*std**2) / (std**4)
return h1 - h1.mean()
def get_fmap(img):
log_response = np.zeros_like(img[:, :, 0], dtype='single')
fmap = np.zeros_like(img[:, :, 0], dtype='uint8')
log_kernel = get_log_kernel(11, 2)
for ii in range(img.shape[2]):
img_filtered = cv2.filter2D(img[:, :, ii].astype('single'), -1, log_kernel)
index = img_filtered > log_response
log_response[index] = img_filtered[index]
fmap[index] = ii
return fmap
fmap ,
, , VIPS , OpenCV. Python. , , ( , OpenCV.). , VIPS, ?
log_response = np.zeros_like(img[:, :, 0], dtype = 'single')
index = img_filtered > log_response
log_response[index] = im_filtered[index]
fmap[index] = ii