Matplotlib colormap - конвертировать из цвета в целое число - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь просмотреть и отредактировать маски классификации, которые представляют собой png в градациях серого со значениями, равными идентификатору класса, т. Е. 1 = класс1, 2 = класс2 и т. Д.

Цветовые карты Matplotlib обеспечивают простой способ создания фиксированной палитры из этих целых чисел, считывания в png градаций серого, применения нормализации, применения карты цветов, масштабирования до 255

Но как мне вернуться назад? Мне нужно прочитать значение RGB на изображении, найти его на карте цветов и преобразовать обратно в исходное целое число: (0,183,255) = 2

К RGB:

img_src = Image.open(srcpath + srcfn)
im = np.array(img_src) * 20    #[1,2,3] -> [20,40,60]
im = cm(im)                    #[20,40,60] -> [[0.,0.7196739,1.,1.],...]
im = np.uint8(im * 255)        #[[0.,0.7196739,1.,1.],...] -> [[0,183,255],...]
im = Image.fromarray(im)

Из RGB:

im = np.array(img_src) 
im = im/255                    #[[0,183,255],...] -> [[0.,0.7196739,1.,1.],...] 
###The missing step
im = uncm(im)                  #[[0.,0.7196739,1.,1.],...] -> [20,40,60] 
im = im/20                     #[20,40,60] -> [1,2,3]
...