Я пытаюсь выровнять изображение RGB с ИК-изображением (одноканальным). Цель состоит в том, чтобы создать 4-канальное изображение R, G, B, IR. Для этого я использую cv2.findTransformECC
, как описано в этот самый аккуратное руководство. На данный момент код не изменился, за исключением строки 13, где для параметра «Движение» задано значение «Евклидово», потому что в будущем я хочу обрабатывать повороты. Я использую Python.
Чтобы проверить работу программного обеспечения, я использовал изображения из руководства. Это работало хорошо, поэтому я хотел сопоставить спутниковые изображения из нескольких спектров, как описано выше. К сожалению, здесь я столкнулся с проблемами.
Иногда алгоритм сходился (по прошествии веков), а иногда он сразу же давал сбой, потому что не мог сходиться, а иногда находил явно неверное решение. В приложении вы найдете два изображения, которые с точки зрения человека легко сопоставить, но алгоритм не работает. Изображения никоим образом не повернуты, они просто не являются одним и тем же изображением (проверьте границы), поэтому ожидается поступательное движение. Изображения озера Нойзидлерзее в Австрии, источник Sentinelhub.
Редактировать: иногда я имею в виду использование разных изображений из Sentinel. Одна пара изображений имеет неизменно одинаковый результат.
Я знаю, что ECC не основан на функциях, что может создать здесь проблему.
Я также читал, что это несколько зависит от исходной матрицы деформации.
Мои вопросы:
- Я неправильно использую
cv2.findTransformECC
? - Есть лучший способ сделать это?
- Должен ли я пытаться Монте-Карло исходные матрицы, пока они не сойдутся? (Это кажется неправильным)
- Вы предлагаете использовать алгоритм, основанный на функциях?
- Если да, есть ли он в наличии или мне придется реализовать это самому?
Спасибо за помощь!