Наложение масок сегментации с предпочтением в Python - PullRequest
0 голосов
/ 08 мая 2019

Рассмотрим 4 сегментированных изображения или числовых массива - A, B, C и D (каждый пиксель равен либо 0, либо classID в месте расположения объекта на изображении). Эти 4 сегментированных двумерных массива являются сегментациями различных объектов, представленных на одном изображении. например. изображение A имеет сегментированный объект # 1, изображение B имеет сегментированный объект # 2 и так далее. Требуется наложить все эти сегментации различных объектов на одно изображение вместо того, чтобы иметь 4 отдельных сегментированных изображения.

Естественно, можно просто выполнить a + b + c + d, чтобы наложить их. Однако сегментированные пиксели объекта могут перекрываться между изображениями. Например, сегментированный пиксель объекта # 1 из изображения «A» может перекрывать a с сегментированным пикселем объекта # 2 в изображении «B». Если это перекрытие происходит, ClassID объекта # 2 имеет преимущество перед положением этого пикселя. ClassID высшего объекта # имеет преимущество. Поэтому нельзя просто добавить все изображения, чтобы объединить все сегментации в одно связное сегментированное изображение.

Пример двух сегментированных изображений - объект A имеет пиксельное значение 1, а B имеет 2. В случае, если рассматриваются только эти два изображения, я бы хотел наложить объект B на объект A (каждый объект будет иметь свой цвет в сочетании). Объект B должен быть виден поверх объекта A, где они перекрываются.

Я использовал метод последовательного добавления каждого изображения к следующему, если значение любого результирующего пикселя равно сумме classID объекта # 1 и classID объекта # 2, это указывает на перекрытие, и я устанавливаю эти пикселей до значения classID # 2. Поскольку это решение сравнения суммы не уникально, оно не сработало правильно.

Один способ, которым я знаю, как это сделать, это итерация каждого пикселя и сравнение пар пикселей по два изображения за раз. Если у кого-то есть более эффективное решение, дайте мне знать!

1 Ответ

0 голосов
/ 08 мая 2019

Звучит так, будто вы просто хотите получить поэлементный максимум всех изображений.Предполагая, что вы используете Numpy, что-то вроде этого должно работать:

numpy.maximum.reduce([A, B, C, D])

Это применяет поэлементную максимальную операцию к каждому массиву по одному (например, сокращение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...