Я пытаюсь реализовать эту бумагу в python. В документе делается попытка удалить два вида теней на изображении: расплывчатые тени (постепенно меняющиеся, без четких границ, таких как собственные тени) и отбрасываемые тени (тени с жесткими границами). После оценки бинарных теневых масок для нечетких и отбрасываемых теней я не понимаю, как они комбинируют маски в соответствии с (этапы 10 и 11).
скажем, если размер моего входного изображения (428, 500,3), градиент x, y_gradient и ответ величины градиента также будут (428, 500 , 3), а две маски (HS и VS) будут иметь размер (428, 500). Согласно шагу 10, я думаю, что они складывают маски горизонтально, что дало бы мне комбинированную двоичную маску размерности (428, 1000). Меня смущает шаг 11: если G_x и G_y - это x_gradient и y_gradient, как можно поэлементно умножить комбинированный двоичный массив размера (428, 1000) на градиенты размера (428,500,3)?
Это мой код до сих пор, мне еще предстоит закодировать оценку жестких теней и восстановление изображения без теней с использованием уравнения Пуассона.
import cv2
import numpy as np
#log transform image
orig_im = cv2.imread("cube.jpg")
cv2.imshow('orig mage', orig_im)
c = 255 / np.log1p(np.max(orig_im))
log_im = c*(np.log1p(orig_im))
log_im = np.array(log_im, dtype = np.uint8)
cv2.imshow('log image', log_im)
#gradients
gx_im = cv2.Sobel(log_im, cv2.CV_64F, 1, 0, ksize=1)
gy_im = cv2.Sobel(log_im, cv2.CV_64F, 0, 1, ksize=1)
gm_im = np.hypot(gx_im, gy_im)
cv2.imshow('grad mag image', gm_im.astype(np.uint8))
#Threshold calc
alpha = 0.5
T = alpha*np.max(gm_im)
gm_max = np.max(gm_im, axis = 2)
mask_size = orig_im.shape[0:2]
vs = np.zeros(mask_size)
vs[gm_max < T] = 1
gm_vs = gm_im
for i in range(3):
gm_vs[:,:,i] = np.multiply(gm_vs[:,:,i],vs)
cv2.imshow('grad vs masked image', gm_vs.astype(np.uint8))
#reconstruction
divx = cv2.Sobel(gm_vs, cv2.CV_64F, 1, 0, ksize=1)
divy = cv2.Sobel(gm_vs, cv2.CV_64F, 0, 1, ksize=1)
div = divx + divy
cv2.imshow('div image', np.abs(div).astype(np.uint8))
Входное изображение
Градиентное изображение
Изображение расхождения согласно шагу 12