Перейти к содержимому
Compvision.ru
Smorodov

Программка калибрующая камеру

Recommended Posts

calibrator.jpg

Архив с проектом: Calibrator.rar

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А зачем требуется такая калибровка? Почему не достаточно 4х крайних точек?

Вот здесь тоже кучей точек калибруют

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
А зачем требуется такая калибровка? Почему не достаточно 4х крайних точек?

Вот здесь тоже кучей точек калибруют

Калибровка нужна, в основном, если необходимо что нибудь мерить, также однозначно она требуется в стерео зрении, т.к. там очень важно получить точные, согласованные координаты объектов (с обеих камер), для вычисления их пространственных координат. Если глянете на формулы, используемые в стерео-зрении то сразу заметите, насколько результат зависит от точности исходных данных.

Калибровка исправляет сложные искажения, которые определяются неидеальностью формы линзы, ошибками её механической фиксации, ошибки изготовления сенсора.

Когда все это складывается получается достаточно сложная форма искажений, как в кривом зеркале, которую зная лишь 4 точки исправить не удастся. Т.к. одна кривизна посередине, а по краям уже совсем другая.

Вот тут пояснения (лекции МГУ): Модель и калибровка камеры

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скачал программу. Распаковал. Запускаю. Выдаёт:

_____________________________________

Project1.exe - Не удалось найти компонент

----------------------------------------------------

Приложению не удалось запуститься, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему.

_____________________________________

Как исправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скачал программу. Распаковал. Запускаю. Выдаёт:

_____________________________________

Project1.exe - Не удалось найти компонент

----------------------------------------------------

Приложению не удалось запуститься, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему.

_____________________________________

Как исправить?

Не работает, так как рассчитано на то, что Builder 6 установлен (это его библиотеки).

Можно скачать отсюда и бросить в папку с программой: http://smorodov.narod.ru/Downloads/Libs.zip

Если чего не хватит, можно в инете найти и в папку с программой бросить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как посмотреть итог колибрации или что там должно получится в итоге?

А можно ли получить полное описание, как работать с программой?.. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я вот провёл колибрацию. Мне написалось "ok". И что дальше? Скорее всего я просто не вкупаюсь в суть колибрации.. Поясните, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Я вот провёл колибрацию. Мне написалось "ok". И что дальше? Скорее всего я просто не вкупаюсь в суть колибрации.. Поясните, пожалуйста.

Программа показывает как калибровать камеру в других программах машинного зрения, это пример использования функций калибровки, входящих в состав библиотеки OpenCV. Она не имеет другой практической ценности, кроме демонстрационной. После успешной калибровки в окне показа видео начинает показываться исправленное изображение (как Opencv это представляет), иногда, (когда набор изображений неудачный) изображение может наоборот искривиться.

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

То есть это не некая системная утилита, а просто пример программирования.

ЗЫ: С программой работают так: устанавливают флажки как надо, запускают калибровку, водят шахматной доской перед камерой (программа должна распознавать доку (рисовать точки в углах)), пока калибровка не закончится, наблюдать что получится :)

Количество образцов - это количество изображений по которым осуществляется калибровка.

Интервал между захватом образцов - это с каким интервалом эти изображения захватываются.

Клеток по горизонтали и Клеток по вертикали - это характеристики доски которую мы показываем программе.

Значение флагов смотреть в руководстве.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. Всё чётко работает. Собрал ещё проект из книги по ОпенЦВ, тоже всё работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток.

Нужно откалибровать 2 (или более) камеры не по доске.

Я долго искал в интернете, скачал очень много книг, большинство на Англ. Нашел только калибровку по шахматной доске.

У меня есть 2D координаты точек на двух камерах, допусти 5 точек.

Надо найти положение 1-й камеры относительно 2-й, и положение точек в 3D пространстве.

Изначальна у меня нет информации вращения и положения камер.

Напишите пжлста код функции, как это реализовать.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Доброго времени суток.

Нужно откалибровать 2 (или более) камеры не по доске.

Я долго искал в интернете, скачал очень много книг, большинство на Англ. Нашел только калибровку по шахматной доске.

У меня есть 2D координаты точек на двух камерах, допусти 5 точек.

Надо найти положение 1-й камеры относительно 2-й, и положение точек в 3D пространстве.

Изначальна у меня нет информации вращения и положения камер.

Напишите пжлста код функции, как это реализовать.

Заранее благодарен.

1) Я думаю что задача не разрешима в данной постановке (потому и не нашли в интернете), так как недоопределена (количество неизвестных больше чем количество уравнений, которые можно составить).

2) Это не задача калибровки, в задаче калибровки мы определяем параметры камер (внешние (взаимное положение) и внутренние (искажения линз и т.п.) ), по известным координатам точек (или заданному их взаимному положению, как на шахматной доске).

3) Просить написать Вам код здесь не стоит, что смогут - подскажут (может чем готовым поделятся), но писать придется Вам.

ЗЫ: Задача не 2-х часов, если проект коммерческий, лучше предложите выполнить работу за плату.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо код писать не надо.

В 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

Если я првильно понял это и есть функция для калибровки без шахматной доски?

Если да, скажите пжлста, как найти эти неизвестные параметры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Хорошо код писать не надо.

В 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), подсуньте ему указатель на ранее созданную матрицу с требуемым количеством элементов (в других параметрах может быть что-то другое).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответ!

Трехмерные координаты точек задаются в системе координат модели а не мировой, то есть Вы можете задаться направлениями осей и центром координат, и в этой системе измерить координаты точек модели, которые затем будете искать на изображениях с камеры, причем важно чтобы соблюдалось соответствие (порядок следования детектированных точек, и их проекций на изображениях с камеры).

У меня есть только двумерные координаты точек. Я знаю, что по этим данным можно найти координаты камеры, после чего координаты точек в пространстве. Какая-то программа делала такие махинации, но я не помню названия программы.

Если известны 2D координаты, то можно провести лучи от центра камеры проходящие через точки на экранной плоскости (для всех камер).

Потом найти точки пересечения соответствующих лучей, это и будут 3D координаты точек.

Но для всего этого нужно знать координаты, и направления камер. В этом и проблема. ((

Напоминаю, что заранее информация о 3D сцене отсутсвует!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Спасибо за ответ!

У меня есть только двумерные координаты точек. Я знаю, что по этим данным можно найти координаты камеры, после чего координаты точек в пространстве. Какая-то программа делала такие махинации, но я не помню названия программы.

Если известны 2D координаты, то можно провести лучи от центра камеры проходящие через точки на экранной плоскости (для всех камер).

Потом найти точки пересечения соответствующих лучей, это и будут 3D координаты точек.

Но для всего этого нужно знать координаты, и направления камер. В этом и проблема. ((

Напоминаю, что заранее информация о 3D сцене отсутсвует!

А есть более развернутая формулировка задачи? Попробуйте набросать схему задачи (на бумаге) с обозначением известных и искомых значений.

Может удастся добавить какие нибудь дополнительные условия.

Вот хотя бы несколько вопросов:

1) перемещаются ли точки независимо друг от друга?

2) если нет, то имеет ли место чисто линейное перемещение? Или есть поворот?

3) есть ли разница по цвету между точками

.......

Данных для однозначного решения сейчас не хватает.

Это примерно как по тени пытаться найти трехмерные координаты точек (решений множество, а толку от них нет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Перемещаются ли точки независимо друг от друга?

Да. Но это наверное не важно, т.к. Калибровка происходит в определенном кадре на двух изображениях. (Но можно и по нескольким кадрам).

Есть ли разница по цвету между точками

Это не важно. У меня есть соответствующие 2D координаты точек на всех изобр. То есть, напр. я знаю координаты точки на первом изображении, и координаты этой же точки на втором. Точки у меня не путаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Допустим известно 7 точек на двух камерах.

Проводим лучи для всех точек проходящие чарез экранную плоскость, теперь находим координаты и вращения камер так, чтобы соответствующие лучи пересекались. А их точками пересечения будут 3D координаты точек.

Вроде как-то так))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Допустим известно 7 точек на двух камерах.

Проводим лучи для всех точек проходящие чарез экранную плоскость, теперь находим координаты и вращения камер так, чтобы соответствующие лучи пересекались. А их точками пересечения будут 3D координаты точек.

Вроде как-то так))

Здесь проблема в том, что взаимное положение точек не известно, поэтому что одна точка, что тучка точек без разницы :(

Так что если решите задачу для одной точки, то решите её и для всех точек.

Подумаю еще, завтра попытаюсь построить вменяемый чертежик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот 2 изображения.

До калибровки, просто проводятся лучи через точки на экранной плоскости.

Потом находятся положения камер, при которых соответствующие лучи пересекаются. (Собственно в этом и задача)

Началой системы координат может быть что угодно, например первая камера.

Если точек >= 6, то можно найти 100% правильный результат. Это есть в статьях про "PnP problem" - Проблема PnP. Но там нет реализации, нашел только теорию.

post-1202-1282755999_thumb.jpg

post-1202-1282756018_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вот 2 изображения.

До калибровки, просто проводятся лучи через точки на экранной плоскости.

Потом находятся положения камер, при которых соответствующие лучи пересекаются. (Собственно в этом и задача)

Началой системы координат может быть что угодно, например первая камера.

Если точек >= 6, то можно найти 100% правильный результат. Это есть в статьях про "PnP problem" - Проблема PnP. Но там нет реализации, нашел только теорию.

Гляньте документик: http://www.ict.edu.ru/ft/002404/num1krav.pdf

А там обратите внимание на подчеркнутое снизу:

post-1-1282759104_thumb.jpg

И тут про нахождение координат точек ничего не говорится, речь идет о трансформации их (известных) координат:

"Шести соответствий точек объекта и их проекций на картинную плоскость достаточно, для составления и однозначного решения системы линейных уравнений относительно неизвестных величин углов поворота и параллельного переноса перехода из координатной системы объекта в систему координат камеры."

Цитата с сайта: http://cgm.computergraphics.ru/content/view/42

Здесь ищутся 6 координат x,y,z,rx,ry,rz для камеры.

И еще ссылочка: http://www.slidefinder.net/a/accurate_non_...on_pnp/10721610

И там примерно тоже самое, расстояния между точками известны, находим ориентацию камеры и её линейные координаты.

Хотя поздно уже, могу что то путать. :(

ЗЫ: Вы же своего все равно добьетесь ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за труды и потраченное время!

Я тут поискал, кароч нашел прогу, которая запросто решает данную проблему.

Здесь статья как им пользоваться:

http://www.render.ru/books/show_book.php?book_id=638

Я знаю, что это возможно, поэтому буду искать)).

ЗЫ: Если что-то найду, первым делом напишу здесь.

Если и вы что-то найдете, дайте знать кароч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Спасибо за труды и потраченное время!

Я тут поискал, кароч нашел прогу, которая запросто решает данную проблему.

Здесь статья как им пользоваться:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Весит эта прога 187 метров.

Спасибо за ссылки. Про фундаментальную матрицу, я нашел статью и на русском))

Допустим я нашел эту матрицу через OpenCV, и что с ним делать дальше?

Что из себя представляет эта матрица?

Где-то говорилось что из этой матрицы можно взять положение и поворот камеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Весит эта прога 187 метров.

Спасибо за ссылки. Про фундаментальную матрицу, я нашел статью и на русском))

Допустим я нашел эту матрицу через OpenCV, и что с ним делать дальше?

Что из себя представляет эта матрица?

Где-то говорилось что из этой матрицы можно взять положение и поворот камеры.

Здесь классная песенка и клип :(

http://danielwedge.com/fmatrix/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только, что посмотрел этот сайт, перед тем как зайти сюда )))

Но так и не посмотрел клип.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×