Ниже приведен код для фильтрации одного изображения, чтобы сделать его не зависящим от освещения.
Фильтр определяется как операция, которая для каждого пикселя делит пиксель на его простое среднее значение всех пикселей локальной области исправления.
В настоящее время я работаю над этим с 3-вложенным циклом for, и для изображения 1080x500 требуется не менее 20 секунд, что слишком неудовлетворительно.
Как я могу векторизовать эту операцию с какой библиотекой?
def filter_local_ratio(cv2img, filter_size, multiplier=100):
pixels_in_image = cv2img.shape
new_image = np.zeros_like(cv2img)
for y in range(filter_size[0] // 2, pixels_in_image[0]):
for x in range(filter_size[1], pixels_in_image[1]):
for rgb in range(pixels_in_image[2]):
patch = cv2img[y - filter_size[0] // 2:y + filter_size[0] // 2,
x - filter_size[1] // 2:x + filter_size[1] // 2,
rgb]
pixel_intensity = cv2img[y, x, rgb]
local_average = np.sum(patch) / (filter_size[0] *
filter_size[1])
ratio = pixel_intensity / local_average
new_image[y, x, rgb] = ratio * multiplier
return new_image