2016-04-27 2 views
0

Что я хочу сделать, это сопоставить систему линейных осей (координаты оси) с пикселями изображения на фотографии. Сначала я хочу откалибровать камеру с помощью сетки кругов, используя соответствующие координаты 2D-оси (трехмерная координата в плоскости z = 0). Это делается один раз, камера устойчива. Позже я хочу найти контуры в изображениях и получить их соответствующие координаты оси. В Python я использовал:opencv - Simple 2D <-> 2D-преобразование

ret, corners = cv2.findCirclesGrid(gray, (16,8)) 
imgpoints.append(corners) 
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) 

В объектах я поместил соответствующие координаты. Например.

objp[:,:2] = np.mgrid[0:16,0:8].T.reshape(-1,2) 
objpoints.append(objp) 

код более или менее из этого учебника: http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html

Я знаю, чем я могу использовать projectPoints, чтобы получить точку в оси координат пикселей изображения. Но я хотел бы сделать oposite и получить координату оси от пикселя изображения. Я много читал здесь о stackoverflow по этой теме, но я не нашел четкого ответа. Из-за недостатка я понял, что мне приходится искажать картинку и использовать solvePnP для получения координат камеры. Я должен признать, что я не понимаю, как интерпретировать эти шаги. Я не уверен, какое изображение должно быть неискаженным (моя сетка круга для калибровки или изображение, которое я обрабатываю позже) и как объединить его с solvePnP. Или даже возможно просто исказить точки контуров без искажения полного изображения? Я также не знаю, как получить позицию в качестве пикселя изображения из результата solvePnP. Кроме того, мне нужно передать не менее 4 баллов для решенияPnP, но я хочу преобразовать отдельные точки. Может быть, я понимаю что-то не так, и мне нужно сделать что-то совершенно другое. Буду признателен за вашу помощь.

ответ

0

Хорошо, извините, ребята. Задача решена. Я поняла всю концепцию неправильно. Я уже выбрал камеру из процедуры калибровки. Я вычислил луч, попавший в плоскость z = 0, и теперь я получил правильную трехмерную точку. Прежде чем это сделать, я также использовал неискаженные точки и отлично работает. Возможно, это также может помочь людям, имеющим такую ​​же проблему.

Смежные вопросы