Smorodov 579 Report post Posted May 24, 2009 Архив с проектом: Calibrator.rar 1 Share this post Link to post Share on other sites
ProgerX 0 Report post Posted June 25, 2009 А зачем требуется такая калибровка? Почему не достаточно 4х крайних точек? Вот здесь тоже кучей точек калибруют Share this post Link to post Share on other sites
Smorodov 579 Report post Posted June 25, 2009 А зачем требуется такая калибровка? Почему не достаточно 4х крайних точек? Вот здесь тоже кучей точек калибруют Калибровка нужна, в основном, если необходимо что нибудь мерить, также однозначно она требуется в стерео зрении, т.к. там очень важно получить точные, согласованные координаты объектов (с обеих камер), для вычисления их пространственных координат. Если глянете на формулы, используемые в стерео-зрении то сразу заметите, насколько результат зависит от точности исходных данных. Калибровка исправляет сложные искажения, которые определяются неидеальностью формы линзы, ошибками её механической фиксации, ошибки изготовления сенсора. Когда все это складывается получается достаточно сложная форма искажений, как в кривом зеркале, которую зная лишь 4 точки исправить не удастся. Т.к. одна кривизна посередине, а по краям уже совсем другая. Вот тут пояснения (лекции МГУ): Модель и калибровка камеры Share this post Link to post Share on other sites
kaka00 0 Report post Posted July 15, 2009 Скачал программу. Распаковал. Запускаю. Выдаёт: _____________________________________ Project1.exe - Не удалось найти компонент ---------------------------------------------------- Приложению не удалось запуститься, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему. _____________________________________ Как исправить? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted July 15, 2009 Скачал программу. Распаковал. Запускаю. Выдаёт: _____________________________________ Project1.exe - Не удалось найти компонент ---------------------------------------------------- Приложению не удалось запуститься, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему. _____________________________________ Как исправить? Не работает, так как рассчитано на то, что Builder 6 установлен (это его библиотеки). Можно скачать отсюда и бросить в папку с программой: http://smorodov.narod.ru/Downloads/Libs.zip Если чего не хватит, можно в инете найти и в папку с программой бросить. Share this post Link to post Share on other sites
kaka00 0 Report post Posted July 25, 2009 Как посмотреть итог колибрации или что там должно получится в итоге? А можно ли получить полное описание, как работать с программой?.. Share this post Link to post Share on other sites
kaka00 0 Report post Posted July 25, 2009 Я вот провёл колибрацию. Мне написалось "ok". И что дальше? Скорее всего я просто не вкупаюсь в суть колибрации.. Поясните, пожалуйста. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted July 25, 2009 Я вот провёл колибрацию. Мне написалось "ok". И что дальше? Скорее всего я просто не вкупаюсь в суть колибрации.. Поясните, пожалуйста. Программа показывает как калибровать камеру в других программах машинного зрения, это пример использования функций калибровки, входящих в состав библиотеки OpenCV. Она не имеет другой практической ценности, кроме демонстрационной. После успешной калибровки в окне показа видео начинает показываться исправленное изображение (как Opencv это представляет), иногда, (когда набор изображений неудачный) изображение может наоборот искривиться. С камерой на системном уровне она ничего не делает, все изменения происходят только в программе, с изображением выводимым этой программой. То есть это не некая системная утилита, а просто пример программирования. ЗЫ: С программой работают так: устанавливают флажки как надо, запускают калибровку, водят шахматной доской перед камерой (программа должна распознавать доку (рисовать точки в углах)), пока калибровка не закончится, наблюдать что получится Количество образцов - это количество изображений по которым осуществляется калибровка. Интервал между захватом образцов - это с каким интервалом эти изображения захватываются. Клеток по горизонтали и Клеток по вертикали - это характеристики доски которую мы показываем программе. Значение флагов смотреть в руководстве. Share this post Link to post Share on other sites
kaka00 0 Report post Posted July 26, 2009 Да. Всё чётко работает. Собрал ещё проект из книги по ОпенЦВ, тоже всё работает. Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 22, 2010 Доброго времени суток. Нужно откалибровать 2 (или более) камеры не по доске. Я долго искал в интернете, скачал очень много книг, большинство на Англ. Нашел только калибровку по шахматной доске. У меня есть 2D координаты точек на двух камерах, допусти 5 точек. Надо найти положение 1-й камеры относительно 2-й, и положение точек в 3D пространстве. Изначальна у меня нет информации вращения и положения камер. Напишите пжлста код функции, как это реализовать. Заранее благодарен. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 22, 2010 Доброго времени суток. Нужно откалибровать 2 (или более) камеры не по доске. Я долго искал в интернете, скачал очень много книг, большинство на Англ. Нашел только калибровку по шахматной доске. У меня есть 2D координаты точек на двух камерах, допусти 5 точек. Надо найти положение 1-й камеры относительно 2-й, и положение точек в 3D пространстве. Изначальна у меня нет информации вращения и положения камер. Напишите пжлста код функции, как это реализовать. Заранее благодарен. 1) Я думаю что задача не разрешима в данной постановке (потому и не нашли в интернете), так как недоопределена (количество неизвестных больше чем количество уравнений, которые можно составить). 2) Это не задача калибровки, в задаче калибровки мы определяем параметры камер (внешние (взаимное положение) и внутренние (искажения линз и т.п.) ), по известным координатам точек (или заданному их взаимному положению, как на шахматной доске). 3) Просить написать Вам код здесь не стоит, что смогут - подскажут (может чем готовым поделятся), но писать придется Вам. ЗЫ: Задача не 2-х часов, если проект коммерческий, лучше предложите выполнить работу за плату. Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 23, 2010 Хорошо код писать не надо. В OpenCV есть функция cvCalibrateCamera и cvCalibrateCamera2. Я не до конца понял что они делают. Это же калибровка по точкам? Функция выглядит так: void cvCalibrateCamera( int numImages, int* numPoints, CvSize imageSize, CvPoint2D32f* imagePoints32f, CvPoint3D32f* objectPoints32f, CvVect32f distortion32f, CvMatr32f cameraMatrix32f, CvVect32f transVects32f, CvMatr32f rotMatrs32f, int useIntrinsicGuess ); numImages - количество изображений = кол-во камер numPoints - Array of the number of points in each image. (Количество точек для каждого изображения) imageSize - Size of the image. (Размер изображения (ширина/высота)) imagePoints32f - Pointer to the images. (Это не совсем понятно, CvPoint2D32f* - массив координат точек?) objectPoints32f - Pointer to the pattern. (Здесь тоже не понятно, Это CvPoint3D32f, у меня нет трехмерных координат точек! Или функция сама возвратит мне эти данные?) distortion32f - Array of four distortion coefficients found. (Массив четырех коэффициентов искажения, где мне его взять?) cameraMatrix32f - Camera matrix found. (Матрица камеры, это мне не известно) transVects32f - Array of translate vectors for each pattern position in the image. (Как найти?) rotMatrs32f - Array of the rotation matrix for each pattern position in the image. (Как найти?) useIntrinsicGuess - Intrinsic guess. If equal to 1, intrinsic guess is needed. (Как найти?) Наверное я где-то ошибся, т.к. переводил через translate.google.ru Если я првильно понял это и есть функция для калибровки без шахматной доски? Если да, скажите пжлста, как найти эти неизвестные параметры? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 23, 2010 Хорошо код писать не надо. В OpenCV есть функция cvCalibrateCamera и cvCalibrateCamera2. Я не до конца понял что они делают. Это же калибровка по точкам? Функция выглядит так: void cvCalibrateCamera( int numImages, int* numPoints, CvSize imageSize, CvPoint2D32f* imagePoints32f, CvPoint3D32f* objectPoints32f, CvVect32f distortion32f, CvMatr32f cameraMatrix32f, CvVect32f transVects32f, CvMatr32f rotMatrs32f, int useIntrinsicGuess ); numImages - количество изображений = кол-во камер numPoints - Array of the number of points in each image. (Количество точек для каждого изображения) imageSize - Size of the image. (Размер изображения (ширина/высота)) imagePoints32f - Pointer to the images. (Это не совсем понятно, CvPoint2D32f* - массив координат точек?) objectPoints32f - Pointer to the pattern. (Здесь тоже не понятно, Это CvPoint3D32f, у меня нет трехмерных координат точек! Или функция сама возвратит мне эти данные?) distortion32f - Array of four distortion coefficients found. (Массив четырех коэффициентов искажения, где мне его взять?) cameraMatrix32f - Camera matrix found. (Матрица камеры, это мне не известно) transVects32f - Array of translate vectors for each pattern position in the image. (Как найти?) rotMatrs32f - Array of the rotation matrix for each pattern position in the image. (Как найти?) useIntrinsicGuess - Intrinsic guess. If equal to 1, intrinsic guess is needed. (Как найти?) Наверное я где-то ошибся, т.к. переводил через translate.google.ru Если я првильно понял это и есть функция для калибровки без шахматной доски? Если да, скажите пжлста, как найти эти неизвестные параметры? Там написано: "The coordinates of 3D object points and their correspondent 2D projections in each view must be specified. That may be achieved by using an object with known geometry and easily detectable feature points." Что означает: Координаты точек трехмерного объекта должны быть заданы, также должны быть определены соответствующие им двумерные координаты на каждом изображении. Это может быть достигнуто при помощи объекта известной конфигурации с легко детектируемыми характерными точками. Трехмерные координаты точек задаются в системе координат модели а не мировой, то есть Вы можете задаться направлениями осей и центром координат, и в этой системе измерить координаты точек модели, которые затем будете искать на изображениях с камеры, причем важно чтобы соблюдалось соответствие (порядок следования детектированных точек, и их проекций на изображениях с камеры). distortion32f - Array of four distortion coefficients found. - Вообще-то это (и многие из тех которые Вы не понимаете как найти) выходной параметр (output), подсуньте ему указатель на ранее созданную матрицу с требуемым количеством элементов (в других параметрах может быть что-то другое). Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 24, 2010 Спасибо за ответ! Трехмерные координаты точек задаются в системе координат модели а не мировой, то есть Вы можете задаться направлениями осей и центром координат, и в этой системе измерить координаты точек модели, которые затем будете искать на изображениях с камеры, причем важно чтобы соблюдалось соответствие (порядок следования детектированных точек, и их проекций на изображениях с камеры). У меня есть только двумерные координаты точек. Я знаю, что по этим данным можно найти координаты камеры, после чего координаты точек в пространстве. Какая-то программа делала такие махинации, но я не помню названия программы. Если известны 2D координаты, то можно провести лучи от центра камеры проходящие через точки на экранной плоскости (для всех камер). Потом найти точки пересечения соответствующих лучей, это и будут 3D координаты точек. Но для всего этого нужно знать координаты, и направления камер. В этом и проблема. (( Напоминаю, что заранее информация о 3D сцене отсутсвует! Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 25, 2010 Спасибо за ответ! У меня есть только двумерные координаты точек. Я знаю, что по этим данным можно найти координаты камеры, после чего координаты точек в пространстве. Какая-то программа делала такие махинации, но я не помню названия программы. Если известны 2D координаты, то можно провести лучи от центра камеры проходящие через точки на экранной плоскости (для всех камер). Потом найти точки пересечения соответствующих лучей, это и будут 3D координаты точек. Но для всего этого нужно знать координаты, и направления камер. В этом и проблема. (( Напоминаю, что заранее информация о 3D сцене отсутсвует! А есть более развернутая формулировка задачи? Попробуйте набросать схему задачи (на бумаге) с обозначением известных и искомых значений. Может удастся добавить какие нибудь дополнительные условия. Вот хотя бы несколько вопросов: 1) перемещаются ли точки независимо друг от друга? 2) если нет, то имеет ли место чисто линейное перемещение? Или есть поворот? 3) есть ли разница по цвету между точками ....... Данных для однозначного решения сейчас не хватает. Это примерно как по тени пытаться найти трехмерные координаты точек (решений множество, а толку от них нет). Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 25, 2010 Перемещаются ли точки независимо друг от друга? Да. Но это наверное не важно, т.к. Калибровка происходит в определенном кадре на двух изображениях. (Но можно и по нескольким кадрам). Есть ли разница по цвету между точками Это не важно. У меня есть соответствующие 2D координаты точек на всех изобр. То есть, напр. я знаю координаты точки на первом изображении, и координаты этой же точки на втором. Точки у меня не путаются. Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 25, 2010 Допустим известно 7 точек на двух камерах. Проводим лучи для всех точек проходящие чарез экранную плоскость, теперь находим координаты и вращения камер так, чтобы соответствующие лучи пересекались. А их точками пересечения будут 3D координаты точек. Вроде как-то так)) Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 25, 2010 Допустим известно 7 точек на двух камерах. Проводим лучи для всех точек проходящие чарез экранную плоскость, теперь находим координаты и вращения камер так, чтобы соответствующие лучи пересекались. А их точками пересечения будут 3D координаты точек. Вроде как-то так)) Здесь проблема в том, что взаимное положение точек не известно, поэтому что одна точка, что тучка точек без разницы Так что если решите задачу для одной точки, то решите её и для всех точек. Подумаю еще, завтра попытаюсь построить вменяемый чертежик. Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 25, 2010 Вот 2 изображения. До калибровки, просто проводятся лучи через точки на экранной плоскости. Потом находятся положения камер, при которых соответствующие лучи пересекаются. (Собственно в этом и задача) Началой системы координат может быть что угодно, например первая камера. Если точек >= 6, то можно найти 100% правильный результат. Это есть в статьях про "PnP problem" - Проблема PnP. Но там нет реализации, нашел только теорию. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 25, 2010 Вот 2 изображения. До калибровки, просто проводятся лучи через точки на экранной плоскости. Потом находятся положения камер, при которых соответствующие лучи пересекаются. (Собственно в этом и задача) Началой системы координат может быть что угодно, например первая камера. Если точек >= 6, то можно найти 100% правильный результат. Это есть в статьях про "PnP problem" - Проблема PnP. Но там нет реализации, нашел только теорию. Гляньте документик: http://www.ict.edu.ru/ft/002404/num1krav.pdf А там обратите внимание на подчеркнутое снизу: И тут про нахождение координат точек ничего не говорится, речь идет о трансформации их (известных) координат: "Шести соответствий точек объекта и их проекций на картинную плоскость достаточно, для составления и однозначного решения системы линейных уравнений относительно неизвестных величин углов поворота и параллельного переноса перехода из координатной системы объекта в систему координат камеры." Цитата с сайта: http://cgm.computergraphics.ru/content/view/42 Здесь ищутся 6 координат x,y,z,rx,ry,rz для камеры. И еще ссылочка: http://www.slidefinder.net/a/accurate_non_...on_pnp/10721610 И там примерно тоже самое, расстояния между точками известны, находим ориентацию камеры и её линейные координаты. Хотя поздно уже, могу что то путать. ЗЫ: Вы же своего все равно добьетесь Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 25, 2010 Спасибо за труды и потраченное время! Я тут поискал, кароч нашел прогу, которая запросто решает данную проблему. Здесь статья как им пользоваться: http://www.render.ru/books/show_book.php?book_id=638 Я знаю, что это возможно, поэтому буду искать)). ЗЫ: Если что-то найду, первым делом напишу здесь. Если и вы что-то найдете, дайте знать кароч. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 26, 2010 Спасибо за труды и потраченное время! Я тут поискал, кароч нашел прогу, которая запросто решает данную проблему. Здесь статья как им пользоваться: http://www.render.ru/books/show_book.php?book_id=638 Я знаю, что это возможно, поэтому буду искать)). ЗЫ: Если что-то найду, первым делом напишу здесь. Если и вы что-то найдете, дайте знать кароч. Спасибо за интересную ссылку, добуду прогу, обязательно погоняю её и посмотрю чего добились люди в решении этого вопроса. Может немного перенаправлю Ваш поиск: посмотрите функцию cvFindFundamentalMat вот здесь: http://opencv.willowgarage.com/documentati...nstruction.html и еще ссылку: http://en.wikipedia.org/wiki/Fundamental_m...puter_vision%29 Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 26, 2010 Весит эта прога 187 метров. Спасибо за ссылки. Про фундаментальную матрицу, я нашел статью и на русском)) Допустим я нашел эту матрицу через OpenCV, и что с ним делать дальше? Что из себя представляет эта матрица? Где-то говорилось что из этой матрицы можно взять положение и поворот камеры. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted August 26, 2010 Весит эта прога 187 метров. Спасибо за ссылки. Про фундаментальную матрицу, я нашел статью и на русском)) Допустим я нашел эту матрицу через OpenCV, и что с ним делать дальше? Что из себя представляет эта матрица? Где-то говорилось что из этой матрицы можно взять положение и поворот камеры. Здесь классная песенка и клип http://danielwedge.com/fmatrix/ Share this post Link to post Share on other sites
FreeGOD 0 Report post Posted August 26, 2010 Только, что посмотрел этот сайт, перед тем как зайти сюда ))) Но так и не посмотрел клип. Share this post Link to post Share on other sites