実現したいこと
ラインレーザとカメラを使って、光切断法による三次元計測をしたいです。
そのためのキャリブレーション方法として、arucoマーカを貼ったボードにレーザを照射して、レーザの三次元座標を求め、その座標からレーザが通過する平面を求めようと考えてます。
発生している問題・分からないこと
実環境で計測を行うための、レーザとカメラの位置関係のキャリブレーション方法について知りたいです。
arucoマーカを貼ったボードにレーザを照射して、照射位置の三次元座標を求めることでキャリブレーションしようと考えてます。arucoマーカの三次元座標は求められるのですが、画像中のある座標を、arucoマーカがある平面の三次元座標に変換する方法がわからないです。
該当のソースコード
python
1import cv2 2import numpy as np 3from cv2 import aruco 4 5camera_matrix = np.load('camera_matrix.npy')6dist_coeffs = np.load('dist_coeffs.npy')7aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)8cap = cv2.VideoCapture(1) 9 10while True:11 ret, frame = cap.read()12 if not ret:13 print("Failed to capture image from camera")14 break15 16 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)17 corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict)18 19 if ids is not None:20 frame = aruco.drawDetectedMarkers(frame, corners, ids)21 rvecs, tvecs, _ = aruco.estimatePoseSingleMarkers(corners, 0.042, camera_matrix, dist_coeffs)22 #ここで、画像中のレーザが映る座標を三次元座標に変換したい23 for i in range(len(ids)):24 print(f"Marker ID: {ids[i]}, Position: {tvecs[i]}")25 26 cv2.imshow('Frame', frame)27 if cv2.waitKey(1) & 0xFF == ord('q'):28 break29 30cap.release()31cv2.destroyAllWindows()32
試したこと・調べたこと
上記の詳細・結果
光切断法の実装例について調べたのですが、原理的な説明が多く、実際に実装しているコードは見つかりませんでした。
補足
特になし
0 コメント