Оптимизация изменения массива numpy - PullRequest
0 голосов
/ 13 января 2020

Я написал этот фрагмент кода, чтобы изменить значения пикселей изображения следующим образом:

def px_values_label(img, rgb_list):
    # Change pixel values according to the rgb color code
    # for further shape remodeling (one hot encoding)

    for number, rgb in enumerate(rgb_list):
        mask = (img == rgb).all(axis=3)
        img[mask] = [number,0,0]

    img = rgb2gray(img)

    for w in range(1,len(rgb_list)):
        img[img == w*0.2989] = w
    img[img > len(rgb_list)] = 0

    return img


# The input image only contains these RGB trios (like in here: [image])[1]  
rgb_list = [[7,13,95], [14,245,33], [3,89,10], [64,135,207], [205,24,54]]

image = np.array(Image.fromarray("very_large_image.tif"))

altered_img = px_values_label(image, rgb_list)

Функция принимает массив (img) и список значений RGB (например, rgb_list = [[13,41,22],[76,32,139],[29,234,197]]). . Функция сглаживает изображение в оттенках серого и изменяет значения RGB на 0,1,2,3 ... (согласно предоставленному списку len RGB).

Код работает для небольших изображений и предоставляет мне правильный результат. Однако, я должен играть с очень большими изображениями (12000x12000), заканчивающимися в cra sh, и обработка занимает много времени.

У кого-нибудь есть идея оптимизировать функцию?

С уважением

...