Сравнение меток подключенных компонентов на двух изображениях

У меня есть 32-битное изображение с несколькими подключенными компонентами с разными метками (например, 3 метки). Предположим также, что эти 3 значения меток равны 316067, 213676 и 1000 соответственно. По какой-то причине мне приходится конвертировать это изображение в 16-битное. Конечно, после того, как я выполню преобразование, метки будут сопоставлены с 16-битным диапазоном. Допустим, эти метки сопоставлены с 3000, 14000 и 1000 соответственно (я знаю, что в моих изображениях после преобразования метки, которые уже находились в 16-битном диапазоне, не отображаются ни на один новый номер). Моя цель - найти все такие метки, которые были изменены с 32-битного изображения на 16-битное изображение при отображении. В приведенном выше примере я хочу найти следующее.

1) Метки 1 и 2 были сопоставлены с новым значением метки. 2) метка 1 была сопоставлена ​​с 316067 до 3000, а метка 2 была сопоставлена ​​с 213676 до 14000.

Это становится проблемой для меня, потому что у меня есть сотни таких 32-битных изображений, которые нужно преобразовать в 16-битные изображения, а измененные метки нужно прочитать. Также на каждом изображении у меня есть тысячи ярлыков.

Каков наиболее подходящий и эффективный способ реализации этого? Есть ли в Python рутина, которая может это сделать? Может кто-нибудь указать мне фрагмент кода?

1 ответ

Я пытаюсь разработать ответ, но ваш вопрос неясен, и то, что я хочу сказать, не форматируется и не помещается в комментарии, поэтому я начну с частичного ответа и отредактирую / разработаю его, как вы поясните...

Вы не говорите, что ваше изображение одноканальное, но так как вы назначаете 3 метки как 316067, 213676 и 1000, я предполагаю, что один канал. Правильный?

Давайте синтезируем пример изображения:

im = np.arange(0,65536*65536,8192,dtype=np.uint32).reshape(1024,-1)

Что дает im как 1024x512 пикселей и значения как:

   array(
   [[         0,       8192,      16384, ...,    4177920, 4186112],
   [   4194304,    4202496,    4210688, ...,    8372224,  8380416],
   ...,
   [4282384384, 4282392576, 4282400768, ..., 4286562304, 4286570496],
   [4286578688, 4286586880, 4286595072, ..., 4290756608, 4290764800],
   [4290772992, 4290781184, 4290789376, ..., 4294950912, 4294959104]],
   dtype=uint32)

И это дает количество уникальных этикеток / цветов как:

len(np.unique(im))                                                                                                                                                                                       
524288

Так это представитель? А теперь, как вы в настоящее время получаете 16-битное изображение? И почему?

Другие вопросы по тегам