Я написал этот фрагмент кода, чтобы изменить значения пикселей изображения следующим образом:
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, и обработка занимает много времени.
У кого-нибудь есть идея оптимизировать функцию?
С уважением