camera_calibration_API

授权协议 Apache-2.0 License
开发语言
所属分类 应用工具、 科研计算工具
软件类型 开源软件
地区 不详
投 递 者 邹铭
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

camera_calibration_API

A repository containing the camera calibration API

Repository Overview:

camera_calibration.py:contains an API which tries to minic the MATLAB's camera calibration app functionality. This API is a thin wrapper around the opencv's camera calibration functionalities.

examples: A directory containing various examples

Camera_Calibration_API:

Introduction:

The Camera Calibration API is a wrapper around the opencv's camera calibration functionalities. This tries to mimic the MATLAB camera calibration app's functionality in python. The API supports all the 3 calibration patterns supported by opencv namely: Chessboards, Asymmetric circular grids and Symmetric circular grids. The API by default runs on 4 threads for speedup. The speed-up may not be marginal in the case of chessboard calibration because in most cases the bottle neck will be a single chessboard image (run on a single core) which the algorithm takes time to detect.

Dependencies:

  • works in both python-3 and python-2
  • opencv (Tested in version 3.3.0)
  • numpy
  • matplotlib
  • pickle
  • argparse
  • glob
  • pickle
  • multiprocessing
  • os
  • pandas

Example:

Examples to use the Camera_Calibration_API() for calibration using chessboard, symmetric circular grids and asymmetric circular grids can be found in the example_notebooks folder

Features:

  • Supports all the 3 calibration patterns supported by opencv : Chessboards, Asymmetric circular grids and Symmetric circular grids.
  • Additionally a custom calibration pattern can also be implemented. (Look at the next section for how to calibrate using custom pattern.)
  • Visualizes the Reprojection error plot
  • Ability to Recalibrate the camera by neglecting the images with very high reprojection errors.
  • Camera centric and Pattern centric views can be visualized using the visualize_calibration_boards method after calibration.
  • Blob detection parameters for detecting asymmetric and symmetric circular grids can be accessed and modified via the Camera_Calibration_API's object prior to calling the calibrate_camera method
  • Also has terminal support with minimal control on the variables. Use it as an importable module for better control over the variables
  • Can also be easily extended to support other unimplemented calibration patterns

Using custom calibration board with the Camera_Calibration_API.

So you want to extend the API for a custom calibration pattern? Well... OK! Just follow the follow the steps below

  • The calibrate_camera accepts two additional arguments called custom_world_points_function and custom_image_points_function.
  • You must implement the above two custom methods and pass it as an argument to the calibrate_camera method
custom_world_points_function(pattern_rows,pattern_columns):
  • This function is responsible for calculating the 3-D world points of the given custom calibration pattern.
  • Should take in two keyword arguments in the following order: Number of rows in pattern(int), Number of columns in pattern(int)
  • Must return only a single numpy array of shape (M,3) and type np.float32 or np.float64 with M being the number of control points of the custom calibration pattern. The last column of the array (z axis) should be an array of 0
  • The distance_in_world_units is not multiplied in this case. Hence, account for that inside the function before returning
  • The world points must be ordered in this specific order : row by row, left to right in every row
custom_image_points_function(img,pattern_rows,pattern_columns):
  • This function is responsible for finding the 2-D image points from the custom calibration image.
  • Should take in 3 keyword arguments in the following order: image(numpy array),Number of rows in pattern(int), Number of columns in pattern(int)
  • This must return 2 variables: return_value, image_points
  • The first one is a boolean Representing whether all the control points in the calibration images are found
  • The second one is a numpy array of shape (N,2) of type np.float32 containing the pixel coordinates or the image points of the control points. where N is the number of control points.
  • This function should return True only if all the control points are detected (M = N)
  • If all the control points are not detected, fillup the 2-D numpy array with 0s entirely and return with bool == False.
  • The custom image points must be ordered in this specific order: : row by row, left to right in every row

NOTE: 'Custom' pattern is not supported when accessed from terminal

Supported Calibration patterns (rows x columns) bydefault:

Chessboard or Checkerboard pattern (6 x 9):

chessboard

Asymmetrical circular grid/pattern (4 x 11):

Asymmetric circular grid.

NOTE for calibrating using Asymmetric circular grid:

  • The code assumes that each asymmetric circle is placed at half the distance_in_world_units in both (x,y) from each other.

  • The distance_in_world_units is specified as the distance between 2 adjacent circle centers at the same y coordinate

  • The above is a 4 x 11 (r x c) asymmetrical circular grid.

  • If you are using the same orientation as the above, Then this orientation is termed as double_count_in_column which is by default set to True.

  • If you are using an orientation which is 90deg to the above orientation 11 x 4 (r x c) then the double count is along the rows. In this case, set object.double_count_in_column = False prior to calling object.calibrate_camera method.

Symmetric circular grid/pattern (7 x 6):

Symmetrical circular pattern

  • CameraCharacteristics.Key Public methods Return Name Description boolean equals(Object o) 某个对象是否与这个相等 String getName() 返回camelCase形式名字 int hashCode() 返回对象的哈希编码值 String toString() 返回字符串形式的CameraCharact

  • CameraCalibration 依赖于Pangolin,后者的代码目前有些大小写的问题,由此导致CameraCalibration工程也有类似的问题。要将工程代码中的Pangolin改成pangolin。 此外,还有一处涉及Pangolin编译报错: /home/yasi/opencv/Pangolin-master/pangolin/../pangolin/display.h: In con

  • 概览 枚举、查询和打开可用的相机设备,需要获取一个 CameraManager 实例。 一个 CameraDevices 提供一句静态属性信息,描述了硬件设备和设备的可用设置和输出参数。这些信息是通过 CameraCharacteristics 对象提供的,可以使用 getCameraCharacteristics(String) 获得。 为了从相机捕获图像或图像流,应用首先必须创建一个相机捕获会

  • 操作步骤。。。 Camera Camera FOV Calibration 利用A3 纸无缩放打印calibration-pattern.pdf 目标文件, 同时将它挂在墙上。 calibration-pattern.pdf 目标文件的地址如下: https://static.googleusercontent.com/media/source.android.com/zh-CN//compati

  • Android:Camera API 学习(二) 一、Android:保存媒体文件 用户创建的照片和视频等媒体文件应保存到设备的外部存储目录(SD 卡)中,这样不仅可以节省系统空间,还能让用户在不使用其设备的情况下访问这些文件。您可以将媒体文件保存至设备上的多个目录位置,但作为开发者,您应考虑的标准位置仅有两个: Environment.getExternalStoragePublicDirect

  • 简介 在ros中有很多的camera包了,提供了非常好的camera支持。针对我的kinetic 可以搜素一下看看。 $ apt-cache search camera | grep ros-kinetic ros-kinetic-astra-camera - Drivers for Orbbec Astra Devices. ros-kinetic-avt-vimba-camera - Wr

  • 教程1:你好ZED 原教程及代码链接:https://github.com/wangjhit/zedStereoCamera_tutorials/tree/master/tutorial%201%20-%20hello%20ZED 本教程仅显示如何配置和打开ZED,然后打印其序列号,然后关闭相机。这是使用ZED SDK最基本的步骤和良好的开端。 先决条件 Windows 7 64位或更高版本,Ub

相关阅读

相关文章

相关问答

相关文档