slides calibration

14
OpenCV and firewire camera Camera Calibration Luis Baumela, Juan Bekios-Calfa Luis Baumela, Juan Bekios-Calfa Camera Calibration

Upload: precioso122

Post on 29-Nov-2014

91 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Slides Calibration

OpenCV and firewire camera

Camera Calibration

Luis Baumela, Juan Bekios-Calfa

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 2: Slides Calibration

OpenCV and firewire camera

Outline

I Camara calibration

I Homography estimate

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 3: Slides Calibration

OpenCV and firewire camera

Camara calibration

I http://opencv.willowgarage.com/documentation/python/camera calibration and 3d reconstruction.html

I The functions in this section use the so-called pinhole cameramodel. That is, a scene view is formed by projecting 3D pointsinto the image plane using a perspective transformation.

I sm′ = A[R|t]M ′

I

s

uv1

=

fx 0 cx0 fy cy0 0 1

r11 r12 r13 t1r21 r22 r23 t2r31 r22 r33 t3

XYZ1

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 4: Slides Calibration

OpenCV and firewire camera

Camara calibration

I Where (X ,Y ,Z ) are the coordinates of a 3D point in theworld coordinate space.

I (u, v) are the coordinates of the projection point in pixels.

I A is called a camera matrix, or a matrix of intrinsicparameters.

I (cx , cy ) is a principal point (that is usually at the imagecenter).

I fx , fy are the focal lengths expressed in pixel-related units.

I The joint rotation-translation matrix [R|t] is called a matrix ofextrinsic parameters.

I A=?, R=?, t=?

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 5: Slides Calibration

OpenCV and firewire camera

Camara calibration

I http://grauonline.de/wordpress/?p=5

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 6: Slides Calibration

OpenCV and firewire camera

Camara calibration

I http://www.jesusllor.es/?p=37

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 7: Slides Calibration

OpenCV and firewire camera

Camara calibration

I http://www.jesusllor.es/?p=37

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 8: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

import glob

import cv

PATH_ORIGIN = "../../images/chessboard/test/*.jpg"

list_files = glob.glob(PATH_ORIGIN)

# Create a structure for a gray image

rgb_image = cv.LoadImage(list_files[0], cv.CV_LOAD_IMAGE_COLOR)

gray_image = cv.CreateImage(cv.GetSize(rgb_image), cv.IPL_DEPTH_8U, 1)

# Window to show images

cv.NamedWindow("Show image", 1)

cv.NamedWindow("Show corners", 1)

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 9: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

# Board size

chessboard_dim = (7,7) #width, height

# Get the image data

n_boards = len(list_files) # Number of boards

print "Number of boards", n_boards

board_w = chessboard_dim[0]

board_h = chessboard_dim[1]

board_n = board_w * board_h # Datos por tablero

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 10: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

# Save the image information and objects in the world

image_points = cv.CreateMat(n_boards*board_n, 2, cv.CV_32FC1)

object_points = cv.CreateMat(n_boards*board_n, 3, cv.CV_32FC1)

points_counts = cv.CreateMat(n_boards, 1, cv.CV_32SC1)

intrinsic_matrix = cv.CreateMat(3, 3, cv.CV_32FC1)

distortion_coeffs = cv.CreateMat(4, 1, cv.CV_32FC1)

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 11: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

successes = 0

total_corners = 0

# Read images of a directory

for file_image in list_files:

print "Image file: ", file_image

# Load image

rgb_image = cv.LoadImage(file_image, cv.CV_LOAD_IMAGE_COLOR)

cv.ShowImage("Mostrar imagen", rgb_image)

# Corners detected (It works best if the image is in color)

found_all, corners =

cv.FindChessboardCorners(rgb_image, chessboard_dim,

cv.CV_CALIB_CB_ADAPTIVE_THRESH|cv.CV_CALIB_CB_NORMALIZE_IMAGE)

# Improving detection of corners

cv.CvtColor(rgb_image, gray_image, cv.CV_RGB2GRAY)

corners =

cv.FindCornerSubPix(gray_image, corners, (5,5), (-1,-1),

(cv.CV_TERMCRIT_EPS+cv.CV_TERMCRIT_ITER, 30, 0.1))

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 12: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:# Draw corners

cv.DrawChessboardCorners(rgb_image, chessboard_dim, corners, found_all)

cv.ShowImage("Mostrar esquinas", rgb_image)

# If we got a good board, add it to our data

counter_count = len(corners)

print "Counter count: ", counter_count

if (counter_count == board_n):

step = successes * board_n

print "step: ", step

i = step

j = 0

while j < board_n:

# Agregar los datos a las matrices

image_points[i, 0] = corners[j][0]

image_points[i, 1] = corners[j][1]

object_points[i, 0] = j//board_w

object_points[i, 1] = j%board_w

object_points[i, 2] = 0.0

j += 1

i += 1

points_counts[successes, 0] = board_n

total_corners += board_n

successes += 1

else:

break

cv.WaitKey()

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 13: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

# CALIBRATE THE CAMERA!

cv.SetZero(intrinsic_matrix)

cv.SetZero(distortion_coeffs)

intrinsic_matrix[0, 0] = 1.0

intrinsic_matrix[1, 1] = 1.0

print "n_board", n_boards

print "total_corners", total_corners

rvects = cv.CreateMat(n_boards, 3, cv.CV_32FC1)

tvects = cv.CreateMat(n_boards, 3, cv.CV_32FC1)

cv.CalibrateCamera2(object_points,

image_points,

points_counts,

cv.GetSize(gray_image),

intrinsic_matrix,

distortion_coeffs,

rvects,

tvects,

0)

Luis Baumela, Juan Bekios-Calfa Camera Calibration

Page 14: Slides Calibration

OpenCV and firewire camera

Camara calibration

Code:

print

print "Intrinsic matrix"

for i in xrange(3):

print [intrinsic_matrix[i,j] for j in xrange(3)]

print "Vector rotation"

for i in xrange(n_boards):

print rvects[i,0], rvects[i,1], rvects[i,2]

Luis Baumela, Juan Bekios-Calfa Camera Calibration