ligaspace метод параллакса
| |
codegrinder | Дата: Среда, 29.09.2010, 10:01 | Сообщение # 31 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ligaspace) В этом бы разобраться подробнее. Выбор точек на снимках приводит к искусственности или зависимости от выборки точек. Так? Что еще можете сказать об алгоритме? На стереопаре параллакс пятиэтажки (удалена на 100-150 метров) и черного пятна (впереди перед объективом, 3-4 метров) одинаковые с точностью до нескольких пикселей. Очевидно, это ошибка, возможно в выборе точек сведения. Как это можно исправить? Ошибка вероятно вызвана неточными исходными данными - пока не получается абсолютно точно указать соответствия. Плюс, пиксельное смещение вроде как зависит от удаленности от центра. Вообще, я сам всё ещё продолжаю разбираться. Описание алгоритма могу перевести, но это отнимет много времени, т.к. там несколько глав посвящено этому, и довольно много математики. Но если надо - скажите.
Сообщение отредактировал codegrinder - Среда, 29.09.2010, 10:58 |
|
| |
ligaspace | Дата: Среда, 29.09.2010, 11:53 | Сообщение # 32 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Quote (codegrinder) Описание алгоритма могу перевести, но это отнимет много времени, т.к. там несколько глав посвящено этому, и довольно много математики. Но если надо - скажите. Кратко, в несколько абзацев можно описать алгоритм? И ещё. Если дать отличие оптических осей между снимками по х и у, работа пойдёт быстрее?
|
|
| |
codegrinder | Дата: Среда, 29.09.2010, 12:17 | Сообщение # 33 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ligaspace) Кратко, в несколько абзацев можно описать алгоритм? Уже описал: Quote (codegrinder) Я себе это представляю так: убирается дисторсия, затем определяется взаимное расположение плоскостей снимков по соответствующим друг другу точкам на снимках, и плоскости снимков программно выравниваются в одну плоскость. Остальное - математика в больших кол-вах: фундаментальная матрица, гомография, матрица внутренностей камеры, эпиполярная геометрия, и т.д. и т.п. Quote (ligaspace) И ещё. Если дать отличие оптических осей между снимками по х и у, работа пойдёт быстрее? Что имеется в виду? P.S. В данный момент тормоза связаны с тем, что я выкладываюсь на работе, прихожу домой, а там тоже надо кое-что сделать. Со временем всё конечно разберу, но в два счёта не получится, так что просто надо подождать. Тем более, что я не склонен выкладывать промежуточные результаты процесса.
Сообщение отредактировал codegrinder - Среда, 29.09.2010, 12:55 |
|
| |
ligaspace | Дата: Среда, 29.09.2010, 16:02 | Сообщение # 34 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Quote (codegrinder) Остальное - математика в больших кол-вах: фундаментальная матрица, гомография, матрица внутренностей камеры, эпиполярная геометрия, и т.д. и т.п. Очень важно использование оптических преобразований. Иначе, при работе со снимками логично будут упрекать о выходе за границы Оптики. Quote (codegrinder) Что имеется в виду? Постараюсь привести пример определения оптических осей. Нужно только время. Quote (codegrinder) P.S. В данный момент тормоза связаны с тем, что я выкладываюсь на работе, прихожу домой, а там тоже надо кое-что сделать. Со временем всё конечно разберу, но в два счёта не получится, так что просто надо подождать. Тем более, что я не склонен выкладывать промежуточные результаты процесса. Да! Старт хороший, разогнались очень хорошо. Надеюсь вечером заброшу пример определения оптических осей по снимкам.
|
|
| |
codegrinder | Дата: Среда, 29.09.2010, 19:18 | Сообщение # 35 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ligaspace) Очень важно использование оптических преобразований. Иначе, при работе со снимками логично будут упрекать о выходе за границы Оптики. Я уже думал об этом. Тут нет проблемы - конечный результат проверяем. Плюс, библиотека написанная профессионалами - не повод для сомнений, главное дать ей корректные данные на входе.
|
|
| |
ligaspace | Дата: Среда, 29.09.2010, 23:51 | Сообщение # 36 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Quote (codegrinder) Я уже думал об этом. Тут нет проблемы - конечный результат проверяем. Плюс, библиотека написанная профессионалами - не повод для сомнений Речь идёт о применении оптических преобразований и создании программного алгоритма для получения стереоскопического эффекта по фотоснимкам. Задача новая! Поэтому не согласен! С первого взгляда Learning OpenCV - это программная оболочка, типа маткада, с разными функциями для работы с изображением, главным образом, для их распознавания. Поправляйте. Теперь об определении главной оптической оси. Смещение оптических осей снимков приводит к искажению изображения. Очевидно, что зная смещение оптической оси второго кадра по отношению к первому (или, наоборот) можно применить обратную математическую функцию и привести второй кадр к первому. Это преобразование связанно с оптикой камер. Красными крестами обозначены главные оптические оси на первом и втором снимках. Снимки s002.radikal.ru/i197/1009/10/76b8cf38d3ae.jpg и s50.radikal.ru/i127/1009/1e/bae364969aaa.jpg Ясно, что определить смещение оптической оси кадров относительно друг друга можно. Приведение кадров для определения относительного положения главных оптических осей (обозначены красными крестами). Используется смещение и поворот кадров относительно друг друга; требование - параллакс наиболее удаленного объекта равен нулю. Сохранены 1) искажения из-за разных оптических осей, 2) стереоскопический эффект от смещения камеры в пространстве, 4) перспективные искажения, 4) дисторсия на краях снимков. Изменение главной оптической оси по х равно 16,92 градуса, по у=0,0046 градусов (принято, что угол обзора камеры 70 градусов). Есть так же масштабное изменение. Поправляйте?! Теперь, мы возвращаемся к исходным снимкам, зная изменение главной оптической оси можно кадры привести к одной оптической оси (математическая операция обратной проекции на плоскость). Т.о., мы убираем искажения от разных оптический осей (в первом приближении). Далее остается работа с оптической перспективой и дисторсией. В итоге остаются только стереоскопические явления из-за смещения фотокамеры в пространстве. Цикл расчета можно повторить для лучшего приближения.
|
|
| |
codegrinder | Дата: Четверг, 30.09.2010, 09:22 | Сообщение # 37 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (O'Reilly Learning OpenCV) These ingredients are the essential matrix E and the fundamental matrix F. The matrix E contains information about the translation and rotation that relate the two cameras in physical space (see Figure 12-9), and F contains the same information as E in addition to information about the intrinsics of both cameras.‡ Because F embeds information about the intrinsic parameters, it relates the two cameras in pixel coordinates. Эти ингредиенты - основная матрица E и фундаментальная матрица F. Матрица E содержит информацию о сдвигах и вращениях которые связывают обе камеры в физическом пространстве, и F содержит ту же информацию как и E плюс информацию о внутренних параметрах камеры. Т.к. F включает информацию о внутренних параметрах, она соотносит обе камеры на уровне координат точек. Quote (O'Reilly Learning OpenCV) We can compute F, in a manner analogous to computing the image homography in the previous section, by providing a number of known correspondences. In this case, we don’t even have to calibrate the cameras separately because we can solve directly for F, which contains implicitly the fundamental matrices for both cameras. The routine that does all of this for us is called cvFindFundamentalMat(). int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, CvMat* fundamental_matrix, int method = CV_FM_RANSAC, double param1 = 1.0, double param2 = 0.99, CvMat* status = NULL ); Мы можем вычислить F способом, аналогичным вычислению гомографии изображения в предыдущем разделе, предоставляя известные соответствия. В этом случае нам даже не надо калибровать камеры отдельно потому что мы можем напрямую найти F которая неявно содержит фундаментальные матрицы для обоих камер. Подпрограмма которая делает всё это называется cvFindFundamentalMat().
|
|
| |
ligaspace | Дата: Четверг, 30.09.2010, 09:41 | Сообщение # 38 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Итак, изменение главной оптической оси по х равно 16,92 градуса, по у=0,0046 градусов (принято, что угол обзора камеры 70 градусов). Есть так же масштабное изменение. Поправляйте?! Теперь, мы возвращаемся к исходным снимкам, зная изменение главной оптической оси можно кадры привести к одной оптической оси (математическая операция обратной проекции на плоскость). Т.о., мы убираем искажения от разных оптический осей (в первом приближении). Далее остается работа с оптической перспективой и дисторсией. В итоге остаются только стереоскопические явления из-за смещения фотокамеры в пространстве. В итоге мы получаем стереопару: Стереопара для снимков s002.radikal.ru/i197/1009/10/76b8cf38d3ae.jpg и s50.radikal.ru/i127/1009/1e/bae364969aaa.jpg после оптических преобразований. Как видим, использование только оптических преобразований, причем функции ко всей фотографии, а не к отдельным точкам или элементам снимкам, приводит к сведению снимков. Остаются только стереоскопические эффекты. Стереопара для снимков s002.radikal.ru/i197/1009/10/76b8cf38d3ae.jpg и s50.radikal.ru/i127/1009/1e/bae364969aaa.jpg после оптических преобразований с большим разрешением. По параллаксу можно изучать расстояние до предметов, их глубину. Ясно, что цикл расчета можно повторить для лучшего приближения.
|
|
| |
codegrinder | Дата: Четверг, 30.09.2010, 09:57 | Сообщение # 39 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Да, примерно так, вы уловили идею. OpenCV само всё это делает, так что мне это не поможет, а вот вы сможете правильнее работать со снимками. Только надо сначала убирать дисторсию, чтобы получить чистую перспективную проекцию, а потом уже репроецировать, иначе получится неизвестно что. Кроме того, надо не просто повернуть снимки в параллельные плоскости (представьте, что фотограф сместился вперед), а именно в одну, то есть, если есть два снимка в одном направлении, а перемещение камеры идет под 45 градусов к этому направлению, то надо оба повернуть на 45 градусов в правильную сторону (и как это сделать руками если не знать перемещений я пока не знаю, разве что вычислить перемещение по соответствиям точек, как делает OpenCV). Кроме того, преобразование снимков лучше делать с субпиксельной точностью. По идее, если тут всё точно сделать, вы получите ректифицированные снимки.
Сообщение отредактировал codegrinder - Четверг, 30.09.2010, 10:15 |
|
| |
ligaspace | Дата: Четверг, 30.09.2010, 18:52 | Сообщение # 40 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Используются те же оптические преобразования, что ранее. От перестановки слагаемых сумма не меняется. Если Вы считаете, что что-либо изменилось, то не спешите. Постараюсь привести примеры. Предложенный алгоритм для создания программы стереоректификации неприемлем. Почему? Quote (codegrinder) Эти ингредиенты - основная матрица E и фундаментальная матрица F. Матрица E содержит информацию о сдвигах и вращениях которые связывают обе камеры в физическом пространстве, и F содержит ту же информацию как и E плюс информацию о внутренних параметрах камеры. Т.к. F включает информацию о внутренних параметрах, она соотносит обе камеры на уровне координат точек. Quote (codegrinder) Мы можем вычислить F способом, аналогичным вычислению гомографии изображения в предыдущем разделе, предоставляя известные соответствия. В этом случае нам даже не надо калибровать камеры отдельно потому что мы можем напрямую найти F которая неявно содержит фундаментальные матрицы для обоих камер. Подпрограмма которая делает всё это называется cvFindFundamentalMat(). Другими словами, идёт работа с точками изображения. Отыскиваются схожие окрестности изображения. Из них получают параметры камеры и условий съемки. Так? Что пишут авторы: Какова погрешность или к чему чувствителен программный алгоритм? Как Ваш программный алгоритм?
|
|
| |
codegrinder | Дата: Четверг, 30.09.2010, 19:31 | Сообщение # 41 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Неприемлем, так неприемлем, спорить не буду, и доказывать никому ничего тоже, пусть результат, когда он будет, говорит сам за себя. Только от порядка очень даже может поменяться, а погрешность зависит от разрешения камеры, стереобазы и т.д. Сам алгоритм старается свести погрешность к минимуму, судя по нему, и судя по преобразованию с субпиксельной точностью, именно такова погрешность - доли точек.
|
|
| |
ligaspace | Дата: Пятница, 01.10.2010, 00:02 | Сообщение # 42 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| Quote (codegrinder) Неприемлем, так неприемлем, спорить не буду, и доказывать никому ничего тоже, пусть результат, когда он будет, говорит сам за себя. Знаете, я порядка тысячи снимков свёл для разных задач. Это точная и скурпулёзная работа, выбрасываешь десятки промежуточных результатов в мусор, начинаешь с начала, тратишь порой сутки. Прозрачный алгоритм для создания программы стереоректификации снимков Вас не устраивает! Quote (codegrinder) Сам алгоритм старается свести погрешность к минимуму, судя по нему, и судя по преобразованию с субпиксельной точностью, именно такова погрешность - доли точек. Стоп! Алгоритм работает с пикселями (точками) и окрестностями. Очевидно, искусственными преобразованиями или операциями над матрицами точками можно нарисовать, что угодно. Пример, программа PTGui и подобные ей - то же сглаживание в окрестности точки снимка для получения круговой панорамы. Поэтому подняты естественные вопросы: границы применения и чувствительность алгоритма? И ясно, что погрешность зависит от выбранных человеком матричных преобразований, а не субпиксельная! Пример этому - сравните результат сведения снимков в программе Learning OpenCV со стреопарами выше: Один из результатов сведения снимков в стереопару по программе Learning OpenCV. На стереопаре параллаксы пятиэтажки (удалена на 100-150 метров), черного пятна (впереди перед объективом, 3-4 метров), бордюра (впереди, 4-7 м) и девятиэтажки (100 м) одинаковые с точностью до нескольких пикселей. Очевидно, это ошибка в случае стереоректификации. Извините, но пока Ваши слова не имеют под собой никакой базы, лишь идеи, или приведенные результаты не соответствуют действительности: Quote (codegrinder) К сожалению, так накладывать снимки нельзя, сначала их нужно ректифицировать. То, что получилось - это результат того, что плоскости снимков не выровнены (т.к. снимали их с разной ориентацией камеры). Такие снимки будут ездить, даже если у камеры будет только чистое перспективное искажение (как, например, в программе где "снимок" с ЛРО был положен на пол).
|
|
| |
codegrinder | Дата: Пятница, 01.10.2010, 09:25 | Сообщение # 43 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ligaspace) Знаете, я порядка тысячи снимков свёл для разных задач. Это точная и скурпулёзная работа, выбрасываешь десятки промежуточных результатов в мусор, начинаешь с начала, тратишь порой сутки. Прозрачный алгоритм для создания программы стереоректификации снимков Вас не устраивает! Меня не устраивает, что вы так до конца и не разобравшись в вопросе пытаетесь делать выводы. Насколько я понял из описания алгоритма, там используются как раз только честные преобразования. Но ведь прочесть на английском трудно, гораздо проще поторопиться с выводами. Я ведь даже предлагал перевести этот кусок. Далее, похоже вы неправильно представляете процесс нахождения фундаментальной матрицы, видимо, считаете, что там используется что-то просто тупо переводящее точки. А ведь авторы не идиоты, кто им мешает искать просто подходящую матрицу основанную на вращения, репроекциях и т.п. и минимизирующую отклонение точек по вертикали? Если алгоритм из книги про OpenCV кажется вам непрозрачным, хотя вы его даже не читали, а вам "Рабинович напел", а вы его ещё поняли по своему, я-то тут при чём? Ещё раз говорю, могу перевести, но это отнимет достаточно много времени. Если есть вопросы, так спрашивайте, но обвинять человека который указал вам на несоответствия - это не методы ведения нормальной дискусии. Quote (ligaspace) Стоп! Алгоритм работает с пикселями (точками) и окрестностями. Очевидно, искусственными преобразованиями или операциями над матрицами точками можно нарисовать, что угодно. Пример, программа PTGui и подобные ей - то же сглаживание в окрестности точки снимка для получения круговой панорамы. Поэтому подняты естественные вопросы: границы применения и чувствительность алгоритма? И ясно, что погрешность зависит от выбранных человеком матричных преобразований, а не субпиксельная! Пример этому - сравните результат сведения снимков в программе Learning OpenCV со стреопарами выше: И я вам уже писал, что точность зависит от исходных данных, а в пределе алгоритм способен выдать субпиксельную и я даже где-то читал об этом. Что непонятно? Вы думаете, что кто-то будет подбирать все 9 элементов матрицы, когда можно подобрать пару углов и построить на их основе матрицу? Quote (ligaspace) Извините, но пока Ваши слова не имеют под собой никакой базы, лишь идеи, или приведенные результаты не соответствуют действительности: Конечно-конечно, гораздо правильнее ничего не репроецировать, а оставить совмещение как и было. Я понимаю, что правильный алгоритм гораздо сложнее тупого наложения, но что делать, если правильно так? Спросите американцев, почему они сняли снимки с разным направлением оптических осей, даже не попытавшись сделать честные стереопары? Продолжать дискуссию в таком ключе никакого желания нет. Считаете, что я где-то что-то понимаю неправильно - спросите, а торопиться с выводами - занятие глупое и бессмысленное. И хватит тратить мое время. Все ссылки я дал, общий ход мысли пояснил - дальше разбирайтесь сами, мы не в детском саду. P.S. Если вам кажется неправильным что-то в ректифицированом мной снимке - то я уже писал, что исходные данные были неточными, и иногда довольно сильно. Это скорее как примерно должно быть, чем точный результат. Хотелось показать вам как должен выглядеть результат, хотя бы приблизительно. Скажете, вы ничего не почерпнули из этого сведения?
Сообщение отредактировал codegrinder - Пятница, 01.10.2010, 09:47 |
|
| |
ligaspace | Дата: Пятница, 01.10.2010, 17:06 | Сообщение # 44 |
Admin
Объединение: Администраторы
Сообщений: 185
Награды: 0
Репутация: 0
Статус: Offline
| codegrinder, мы вышли за рамки темы. Сыграем в блиц-шахматы "Наша логика". МОЙ ХОД: Вами было написано в сообщении 5 о методе ligaspace: Quote (codegrinder) К сожалению, так накладывать снимки нельзя, сначала их нужно ректифицировать. То, что получилось - это результат того, что плоскости снимков не выровнены (т.к. снимали их с разной ориентацией камеры). Такие снимки будут ездить, даже если у камеры будет только чистое перспективное искажение (как, например, в программе где "снимок" с ЛРО был положен на пол). Я Вам ответил сообщение 6: Quote (ligaspace) codegrinder, Вы готовы произвести ректифицирование несколько пар земных снимков и получить стереопары? Я же сделаю стандартную процедуру вычитания тех же снимков для получения стереопары. И сравним результаты. После этого можно надежно говорить, какой метод правильно производит исправление оптического искажения. Согласны? В итоге Вы привели стереопару сообщение 27 на основе преобразований по точкам фотографий: Стереопара для снимков s002.radikal.ru/i197/1009/10/76b8cf38d3ae.jpg и s50.radikal.ru/i127/1009/1e/bae364969aaa.jpg по программе Learning OpenCV. На что я Вам ответил в сообщении 30: На стереопаре параллаксы пятиэтажки (удалена на 100-150 метров), черного пятна (впереди перед объективом, 3-4 метров), бордюра (впереди, 4-7 м) и девятиэтажки (100 м) одинаковые с точностью до нескольких пикселей. Очевидно, это ошибка в случае стереоректификации, возможно из-за выбора точек сведения. Как исправить? В сообщении 32 Вам предложено направление нахождения смещения оптических осей для создания программного алгоритма. И в сообщении 36 описан алгоритм для стереректификации, использующий только оптические преобразования одновременно ко всей фотографии. Итогом такого алгоритма является стереопара: Стереопара для снимков s002.radikal.ru/i197/1009/10/76b8cf38d3ae.jpg и s50.radikal.ru/i127/1009/1e/bae364969aaa.jpg после оптических преобразований. В ответ Вы пишите, что данный алгоритм "неприемлем, так не приемлем" (см. выше). Я Вам отвечаю: "Извините, от прозрачного метода Вы отказываетесь... пока Ваши слова не имеют под собой никакой базы, лишь идеи, или приведенные результаты не соответствуют действительности, при этом ссылаясь на Ваше заявление о неприемлемости стереоректификации оптическими преобразованиями методом ligaspace" (сообщение выше). Вы понимаете, что в доказательство своих слов о неприемлемости стереоректификации методом ligaspace Вы привели результат с грубыми ошибками. В ответ Вам для поиска программного алгоритма предложен прозрачный алгоритм на основе метода ligaspace и на деле показан очень хороший результат. Вы отказываетесь. Другими словами, имейте честь! Ваши слова к Вам же: "вы так до конца и не разобравшись в вопросе пытаетесь делать выводы" не имея багажа доказательств. Объявляю шах!
|
|
| |
codegrinder | Дата: Пятница, 01.10.2010, 21:08 | Сообщение # 45 |
Сержант
Объединение: Пользователи
Сообщений: 31
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ligaspace) Как исправить? Quote (codegrinder) Ошибка вероятно вызвана неточными исходными данными - пока не получается абсолютно точно указать соответствия. Очевидно, подать на вход точные данные. Только их не так-то просто достать. Quote (ligaspace) В сообщении 32 Вам предложено направление нахождения смещения оптических осей для создания программного алгоритма. И в сообщении 36 описан алгоритм для стереректификации, использующий только оптические преобразования одновременно ко всей фотографии. Все эти ингредиенты входят в алгоритм ректификации OpenCV, но нужно учитывать не только это, но и определять в какую сторону поворачивать оба снимка. В OpenCV это делается, у вас - нет. Если я что-то понимаю в колбасных обрезках, все преобразования OpenCV тоже оптические. Quote (ligaspace) Извините, от прозрачного метода Вы отказываетесь... пока Ваши слова не имеют под собой никакой базы, лишь идеи, или приведенные результаты не соответствуют действительности, при этом ссылаясь на Ваше заявление о неприемлемости стереоректификации оптическими преобразованиями методом ligaspace Извините, на каком основании вы сделали такой вывод? OpenCV писали профессионалы в своем деле, и уж точно на основании соответствующих научных работ. Вы даже не взяли на себя труд выяснить, что же вы считаете "непрозрачным" алгоритмом. Quote (ligaspace) В ответ Вам для поиска программного алгоритма предложен прозрачный алгоритм на основе метода ligaspace и на деле показан очень хороший результат. Вы отказываетесь. Результат - довольно-таки плохой. Вертикальные координаты точек на снимках не совпадают (и разница по вертикали между точками тоже). Это значит, что ректификацию вы произвели неточно, и по такому совмещению удаленность получится с ощутимыми ошибками. И вам не удастся её провести точно, пока вы не учтете описанный мной момент: Quote (codegrinder) Кроме того, надо не просто повернуть снимки в параллельные плоскости Мне же, чтобы получить правильный результат надо только передать точные соответствия. Почувствуйте разницу. Очень странно конечно, что я после этого отказываюсь пользоваться вашим неточным (но всё же гораздо более точным, чем раньше) алгоритмом, правда?
Сообщение отредактировал codegrinder - Пятница, 01.10.2010, 21:11 |
|
| |
|