Hiệu chuẩn hình học máy ảnh là quá trình đo đạc các tham số của thấu kính máy ảnh và thông số cảm biến hình ảnh của một hình ảnh hoặc đoạn ghi hình ảnh video.
HÌNH 3.22. Các ứng dụng của việc hiệu chuẩn hình ảnh máy ảnh.
Thư viện hiệu chuẩn hình ảnh sử dụng ở đây là thư viện của chương trình thư viện xử lý ảnh mã nguồn mở OpenCV (Open Computer Vision), được viết bằng ngôn ngữ lập trình Python Để tìm kích thước của vật ta chỉ cần đến tham số ma trận nội tại trong các tham số.
Sử dụng một tấm bảng hình ca-rô loại 11 x 8 ô có kích cỡ 594 x 420mm để thực hiện hiệu chuẩn hóa tham số máy ảnh, với kích cỡ chuẩn mỗi ô vuông cạnh là 50mm.
HÌNH 3.23. Quá trình hiệu chuẩn máy ảnh.
Để hiệu chuẩn máy ảnh, bước đầu tiên ta sẽ lấy dữ liệu hình ảnh chụp tấm bảng ca-rô. Tổng cộng em chụp 20 tấm ảnh để làm dữ liệu hiệu chuẩn, bước thứ
SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56
hai trong code hiệu chuẩn ta sẽ đọc các hình ảnh dữ liệu mà ta đã thu được bằng thư viện glob
images = glob.glob('./data/*.jpg') size = np.zeros((w, h-1), dtype='uint8')
Sau khi đã đọc dữ liệu lưu thành mảng đa chiều. Tạo hai mảng array để chứa tọa độ 2 chiều và tọa độ 3 chiều của hình ảnh
objpoints = [] # 3D points in real world space imgpoints = [] # 2D points in image plane
Khởi tạo các điểm trong mảng objp, sử dụng hàm Numpy.zeros để tạo mảng có các giá trị bằng 0, mảng có số lượng tương đương với số góc của bảng hiệu chuẩn ca-rô là 10 x 7, mỗi điểm sẽ có 3 cột cho lần lượt tọa độ x,y và z của từng góc. Giữ nguyên tọa độ z bằng 0, ta sử dụng hàm mgrid vào giá trị tọa độ của x và y để tạo tọa độ mong muốn. Hàm mgrid sẽ trả về giá trị tọa độ với kích cỡ ô và hình dạng ma trận của bảng hiệu chuẩn ca-rô về lại hai cột.
objp = np.zeros((6*8,3), np.float32)
objp[:,:,] = mp.mgrid[0:8,0:6].T.reshape(-1,2) # x,y coordinates
Tiếp theo để tìm các điểm tọa độ ảnh trong ICS ta sẽ chuyển dữ liệu ảnh màu RGB về ảnh chỉ có màu ghi theo thang độ xám, sau đó tìm các góc của ô vuông trên hình.
# Convert image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BRG2GRAY) # Find the Chesse board corners
rer, corners = cv2.findChessboardCorners(gray, (10,7), None)
Thư viện OpenCV cung cấp hàm calibrateCamera() để hiệu chuẩn máy ảnh, thuật toán được sử dụng để hiệu chuẩn máy ảnh được nêu trong tài liệu [23] của tác giả Zhang.
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, size, None, None)
np.save("./ret", ret)
np.save("./mtx", mtx) # camera matrix np.save("./dist", dist) # distortion coefficients np.save("./rvecs", rvecs) # rotation vectors np.save("./tvecs", tvecs) # translation vectors
SVTH: Nguyễn Nhật Anh Lớp: KTDT & THCN K56
Hàm này sẽ lấy điểm Object point, Image point và hình dạng ma trận của dữ liệu hình ảnh để tính toán và trả về ma trận nội tại và ma trận ngoại lai.