2014-01-15 3 views
0

В настоящее время я потерян в документации OpenCV и ищу некоторые рекомендации относительно возможного упорядочения функций или, возможно, функции в OpenCV, которую я еще не встретил ...Использование коэффициентов искажения с findHomography в OpenCV

Я слежу за лазером в канале камеры в месте на проекционном экране. До сих пор я использовал findHomography, а затем projectTransform, чтобы выполнить это, однако камера, которую я использовал, имела очень мало искажений. Теперь я использую другую камеру с заметным радиальным искажением. Я использовал cvCalibrateCamera для получения коэффициентов искажения, матрицы камеры и т. Д., Но я не уверен, как я должен использовать эти данные в моем текущем процессе, или, возможно, мне нужно использовать разные функции и/или порядок функций из OpenCV в целом. Любые предложения будут оценены ...

Моего текущим кода, который хорошо работает (без искажений) выглядят следующим образом:

Mat homog; 
homog = findHomography(Mat(vCameraPoints), Mat(vTargetPoints), CV_RANSAC); 

vector<Point2f> cvTrackPoint; 
cvTrackPoint.push_back(Point2f(pMapPoint.fX, pMapPoint.fY));       

Mat normalizedImageMat; 
perspectiveTransform(Mat(cvTrackPoint), normalizedImageMat, homog); 

Point2f normalizedImgPt; 
normalizedImgPt = Point2f(normalizedImageMat.at<Point2f>(0,0)); 
normalizedImgPt.x /= szCameraSize.fWidth; 
normalizedImgPt.y /= szCameraSize.fHeight; 

Я тогда, конечно, умножить normalizedImgPt моего разрешения экрана проекционного

Так снова, просто для того, чтобы уточнить ... У меня есть то, что, как представляется, являются хорошими данными из calibrateCamera, как бы я использовал эту информацию, чтобы повлиять на искажение объектива? Возможно, вышеупомянутый процесс не будет работать, любая помощь?

Спасибо, заранее

ответ

1

Если вы приобрели коэффициенты искажения, то простой (хотя, возможно, неоптимальный) способ вернуться к неискаженным случае будет undistort изображения. Неисправным изображением является изображение камеры с подобными внутренними и внешними параметрами, но без искажения объектива. Соответствующая функция OpenCV: undistort

+0

Спасибо за ответ .. Я понимаю, что вы говорите, но на самом деле неискаженное изображение не поможет мне, потому что питание камеры не отображается во время нормальной работы. Я действительно надеялся на такую ​​функцию, как projectPoints или undistortPoints. Я буду знать x/y в канале/ROI и просто нужно применить значения иска к знанию x/y, чтобы оно было правильным и т. Д. Однако упомянутые выше функции выходят из пространства объекта в пространство изображения камеры. Кроме того, как найтиHomography вписывается или делает это, если вышеуказанные функции действительно работали? – KingCapybara

+0

Ну, я думаю, я не уверен, чего вы пытаетесь достичь, не могли бы вы объяснить это более подробно? Потому что есть функция 'undistortPoints', которая также, похоже, выполняет то, что я думаю, что вы хотите. В дополнение, я не понимаю, почему отображается питание камеры во время нормальной работы. – Olotiar