Я новичок в OpenCV, и я учусь обрабатывать изображения. В рамках моего проекта у меня возникла проблема с деформированием участка изображения в форме эллипса в эллипс назначения. Насколько я понимаю, мне нужно было бы вычислить аффинное преобразование между двумя патчами, а затем преобразовать это преобразование в патч назначения. Просматривая Интернет в поисках помощи, я не нашел способа вычислить аффинные преобразования между двумя эллиптическими пятнами. Я на правильном пути? Буду признателен, если вы дадите мне несколько советов, как действовать дальше или где искать дополнительную информацию.
Аффинное преобразование между эллиптическими пятнами
comment
что вы имеете в виду вычислить аффинные преобразования между двумя эллиптическими пятнами. В чем именно проблема. От чего именно вы вычисляете аффинное преобразование? Набор очков? Изображение двух эллипсов?
- person Hammer   schedule 08.10.2012
comment
Эллиптические пятна представляют интересующую область для дескриптора. Каждый дескриптор в исходном изображении сопоставляется с дескриптором из базы данных изображений. Идея состоит в том, чтобы восстановить исходное изображение с помощью базы данных. Я нашел соответствующие дескрипторы, и теперь мне нужно исказить соответствующие эллиптические участки в исходном изображении. Каждый патч уже имеет аффинное преобразование, поэтому мне нужно найти аффинное преобразование среди соответствующей пары и применить его. Я просто не знаю, как это сделать.
- person stckjp   schedule 08.10.2012
comment
сколько точечных соответствий у вас есть? Вы смотрели cv :: getAffineTransform? как насчет cv :: ratingAffine3D?
- person Hammer   schedule 08.10.2012
comment
проблема в получении аффинного преобразования или деформации?
- person Hammer   schedule 08.10.2012
comment
Дело в том, что мне нужно деформировать каждый эллиптический патч от соответствующего изображения к исходному. Количество патчей зависит от количества дескрипторов, которое зависит от исходного изображения. К сожалению, поскольку у меня есть эллипсы, я не могу использовать классические аффинные преобразования из opencv
- person stckjp   schedule 09.10.2012
comment
Итак, каждое изображение имеет много патчей, и мне нужно деформировать соответствующие патчи, которые я нашел из базы данных, в исходное изображение, которое мне нужно восстановить.
- person stckjp   schedule 09.10.2012
comment
Эллипс определяется тремя точками, почему вы не можете их использовать? Все было бы намного яснее, если бы вы предоставили более подробную информацию в вопросе, в идеале с картинками.
- person Hammer   schedule 09.10.2012
comment
Каждый патч описывает область изображения и задается точкой, представляющей центр области, ее матрицу аффинного преобразования, ее масштаб и ориентацию градиента, а также вектор дескриптора. Теперь я нахожусь в точке, где я нашел соответствующие эллиптические участки между двумя разными изображениями (img1 и img2) с использованием векторов дескрипторов, и то, что я хотел бы сделать для каждого патча img2, - это найти аффинное преобразование относительно соответствующего патч в img1 и деформация патча image2 в патч img1. Надеюсь, теперь стало понятнее.
- person stckjp   schedule 09.10.2012
comment
Итак, у вас есть 2 аффинных преобразования [A] и [B], оба относительно некоторого источника O, и вы хотите найти преобразование между [A] и [B]? В этом весь вопрос?
- person Hammer   schedule 09.10.2012
comment
да, просто эти два элемента эллипсы
- person stckjp   schedule 09.10.2012
Ответы (1)
Тот факт, что ваши элементы являются эллипсами, не имеет отношения к вычислению преобразования. Трансформации одинаково хорошо работают с произвольными формами. Допустим, у вас есть аффинные преобразования [A] и [B] относительно некоторого начала O, вам нужно преобразование между [A] и [B]. Есть несколько способов сделать это, самый простой - получить преобразование из [A] в O, затем из O в [B] и объединить их. [A] к O - это просто обратное к [A], а O к [B] - это просто [B], поэтому
final_transform = [B]*inverse([A]);
здесь - аналогичный вопрос, решение с векторными представлениями также возможно.
Для фактического деформирования вы можете использовать cv :: warpAffine
person
Hammer
schedule
09.10.2012
Верно ли это, если два эллипса имеют разные точки в качестве центров? Если я деформирую A в B, будет ли центр нового участка соответствовать центру B?
- person stckjp; 09.10.2012
Я до сих пор не понимаю, почему важно говорить об эллипсах, я все еще неправильно понимаю вопрос? Аффинное преобразование отображает произвольную конфигурацию точек в новое местоположение. Это могут быть круги, треугольники, каракули, что угодно. Я предполагаю, что вы знаете преобразования [A] и [B], это правда?
- person Hammer; 09.10.2012
Да, это правда. Моя идея состояла в том, чтобы использовать это аффинное преобразование между двумя патчами, чтобы преобразовать один патч в другой. Это правильное рассуждение? Если да, то как я могу этого добиться? Спасибо за ответы.
- person stckjp; 09.10.2012
да, вы можете использовать аффинное преобразование для деформации патча, посмотрите cv :: warpAffine а>
- person Hammer; 09.10.2012
Спасибо, решение не было таким сложным, я думаю
- person stckjp; 10.10.2012