Как векторизовать пользовательскую свертку со всем весом 1 в CPU - PullRequest
0 голосов
/ 05 апреля 2019

Ниже приведен код для фильтрации одного изображения, чтобы сделать его не зависящим от освещения.

Фильтр определяется как операция, которая для каждого пикселя делит пиксель на его простое среднее значение всех пикселей локальной области исправления.

В настоящее время я работаю над этим с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...