A generic and robust calibration toolbox for multi-camera systems

Overview

MC-Calib

Toolbox described in the paper "MultiCamCalib: A Generic Calibration Toolbox for Multi-Camera Systems".

Installation

Requirements: Ceres, Boost, OpenCV 4.5.x, c++14

There are several ways to get the environment ready. Choose any of them:

  1. The easiest way to get the environment is to pull it from the Docker Hub:

    • Install docker

    • Pull the image:

      docker pull frameau/opencv-ceres
    • Run pulled image:

      xhost +si:localuser:root
      docker run \
                   --runtime=nvidia \
                   -ti --rm \
                   --network host \
                   --gpus all \
                   --env="DISPLAY" \
                   --env="QT_X11_NO_MITSHM=1" \
                   --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
                   --volume="$HOME/.Xauthority:/home/$USER/.Xauthority:rw" \
                   --volume="${PWD}:/home/$USER/MultiCamCalib" \
                   --volume="PATH_TO_DATA:/home/$USER/MultiCamCalib/data" \
                   frameau/opencv-ceres
      
      # xhost -local:root  # resetting permissions
  2. It is also possible to build the docker environment manually:

    • Install docker

    • Create the image:

      docker build - < Dockerfile -t SPECIFY_YOUR_NAME
  3. Alternatively, every dependency can be installed independently without docker:

    • Install OpenCV 4.5.x. Either instal system-wide with sudo make install or link to your build in CmakeLists.txt.

    • Follow installation guidelines to install Ceres.

    • Install boost:

      sudo apt install libboost-all-dev
      

Then the following should do the job of compiling the code:

mkdir build
cd build
cmake ..
make -j10  

Generate documentation

  • Install Doxygen:

    sudo apt install flex
    sudo apt install bison
    git clone https://github.com/doxygen/doxygen.git
    cd doxygen
    mkdir build
    cd build
    cmake -G "Unix Makefiles" ..
    make
    make install # optional
  • Doxygen is already added to the CmakeLists.txt and is auto-generated if dependencies are satisfied. However, it is also possible to set it up manually:

    mkdir docs
    cd docs
    doxygen -g
    #set INPUT = ../src in Doxyfile
    doxygen

Usage

Calibration procedure

  1. generate your own charuco boards

    If all your boards are similar (same number of squares in the x and y directions), you only need to specify the number_x_square, number_y_square and number_board. Then you can run the charuco board generator:

    ./generate_charuco ../configs/calib_param.yml

    If each board have a specific format (different number of squares), then you need to specify it in the fields number_x_square_per_board and number_y_square_per_board, for instance, if you would like to use 2 boards of size [10x3], [5x4] respectively, then you have to set:

    number_board: 2 
    number_x_square_per_board: [10,5]
    number_y_square_per_board: [3,4]
    

    A sample of charuco boards is provided in ./board_samples. Note: the board images are save in the root folder where the code is executed.

  2. print your boards

  3. Measure the size of the squares on your boards

    If the boards have all the same square size, you just need to specify it in square_size and leave square_size_per_board empty. If each boards have a different size specify it in 'square_size_per_board'. For instance square_size_per_board: [1, 25] means that the first and second boards are composed of square of size 0.1 and 0.25 cm respectively. Note that the square size can be in any unit you prefer (m, cm, inch, etc.) and the resulting calibration will also be expressed in this unit.

  4. Acquire your images

    MC-Calib has been designed for synchronized cameras, therefore, you have to make sure that all the cameras in the rig capture images at the exact same time. Additionally, this toolbox has been designed and tested for global shutter cameras, therefore we cannot guarantee highly accurate results if you are using rolling shutter sensors. For high quality calibration make sure to have a limited quantity of motion blur during your sequence.

  5. Prepare your video sequences The images extracted from each cameras have to be stored in a different folders with a common prefix followed by a 3 digits index (starting from 001), for instance if two cameras are used the folder can be called: 'Cam_001' and 'Cam_002'.

  6. Setup the configuration file for your system

    • Set the number of cameras and cameras' types: The number of cameras to be calibrated have to be specified in the field number_camera. If you are calibrating a homogeneous camera system you can specify the camera type with distortion_model, a '0' signifies that all your cameras are perspective (Brown distortion model) and a '1' will use the Kanalla distortion model (fisheye). If you are calibrating a hybrid vision system (composed of both fisheye and perspective cameras), you need to specify the type of distortion model you wish to use in the vector 'distortion_per_camera'

    • Set the image path: You need to specify the folder where the images have been stored in the field root_path for instance '../Data/Image_folder/'

    • set the outputs: By default, MC-Calib will generate the camera calibration results, the reprojection error log, the 3D object structure and the pose of the object for each frames where it has been detected. Additionally, you can save the detection and reprojection images by setting save_detection and save_reprojection to 1.

    • Using only certain boards: If you prepared a large number of calibration objects but if only a few appears in your calibration sequence, you can specify the list of boards' indexes in boards_index. Specifying the board indexes avoids trying to detect all the boards and will speed-up your calibration.

    • advanced setup: For a general calibration setup, for the sake of robustness, we recommend to set min_perc_pts to at least 0.4 (40% of the points of the board should appear to be considered). However, in case of a calibration of limited field-of-view overlapping with a single board, this parameter can be reduced significantly. Our automatic colinear points check should avoid most degenerated configurations. The provided example configuration files contains a few additional paramters which can be tuned. Letting these parameters by default should lead to a correct calibration of your system, however, you can adjust them if needed. These parameters are quite self explicit and described in the configuration files.

  7. Run the calibration

    ./calibrate_stereo ../configs/calib_param.yml

Calibration file

For multiple camera calibration configuration examples see configs/*.yml. For easier start, just duplicate the most relevant setup and fill with details.

######################################## Boards Parameters ###################################################
number_x_square: 5         # number of squares in the X direction
number_y_square: 5         # number of squares the Y direction
resolution_x: 500          # horizontal resolution in pixel
resolution_y: 500          # vertical resolution in pixel
length_square: 0.04        # parameters on the marker (can be kept as it is)
length_marker: 0.03        # parameters on the marker (can be kept as it is)
number_board: 3            # number of boards used for calibration (for overlapping camera 1 is enough ...)
boards_index: []           # leave it empty [] if the board index are ranging from zero to number_board; example of usage boards_index: [5,10 <-- only two board with index 5/10
square_size: 0.192         # size of each square of the board in cm/mm/whatever you want

############# Boards Parameters for different board size (leave empty if all boards have the same size) #################
number_x_square_per_board: []
number_y_square_per_board: []
square_size_per_board: []

######################################## Camera Parameters ###################################################
distortion_model: 0         # 0:Brown (perspective) // 1: Kannala (fisheye)
distortion_per_camera : []  # specify the model per camera, #leave "distortion_per_camera" empty [] if they all follow the same model (make sure that the vector is as long as cameras nb)
number_camera: 2            # number of cameras in the rig to calibrate
refine_corner: 1            # activate or deactivate the corner refinement
min_perc_pts: 0.5           # min percentage of points visible to assume a good detection

cam_params_path: "None"    # file with cameras intrinsics to initialize the intrinsic, write "None" if no initialization available 

######################################## Images Parameters ###################################################
root_path: "../data/Synthetic_calibration_image/Scenario_1/Images/"
cam_prefix: "Cam_"

######################################## Optimization Parameters #############################################
ransac_threshold: 10        # RANSAC threshold in pixel (keep it high just to remove strong outliers)
number_iterations: 1000     # Max number of iterations for the non linear refinement

######################################## Hand-eye method #############################################
he_approach: 0 #0: bootstrapped he technique, 1: traditional he

######################################## Output Parameters ###################################################
save_path: "experiments/Synthetic_calibration_image/Scenario_1/"
save_detection: 1
save_reprojection: 1
camera_params_file_name: "" # "name.yml"

Output explanation

The calibration toolbox automatically output 4 *.yml files. To illustrate them, we propose to display the results obtained from the calibration of a hybrid stereo-vision system.

  • Camera parameters: calibrated_cameras_data.yml
%YAML:1.0
---
nb_camera: 2 
camera_0: # all the calibration parameters (intrinsic/extrinsic) for the camera 0
   camera_matrix: !!opencv-matrix # 3x3 intrinsic matrix
      rows: 3
      cols: 3
      dt: d
      data: [ 6.9057886528642052e+02, 0., 6.5114341701043156e+02, 0.,
          6.8919862105007201e+02, 2.6741231181725999e+02, 0., 0., 1. ]
   distortion_vector: !!opencv-matrix # 1x5 distortion vector (Brown model here)
      rows: 1
      cols: 5
      dt: d
      data: [ -5.5592652556282401e-02, 1.2691061778374907e-01,
          -2.4976766901851363e-04, 1.1847248726536302e-03,
          -6.7785776099559991e-02 ]
   distortion_type: 0 # type of distortion model (0: perspective, 1: fisheye)
   camera_group: 0 #Camera group in which this camera belong, if the calibration has been sucessful, all camera should belong to the group 0
   img_width: 1280 #image size
   img_height: 512
   camera_pose_matrix: !!opencv-matrix
      rows: 4
      cols: 4
      dt: d
      data: [ 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
          1. ] #4x4 extrinsic matrix (for camera 0, it is the identity because it is the reference)
camera_1: # all the calibration parameters (intrinsic/extrinsic) for the camera 1
   camera_matrix: !!opencv-matrix # 3x3 intrinsic matrix for camera 1
      rows: 3
      cols: 3
      dt: d
      data: [ 3.3467577884661034e+02, 0., 6.3270889699552083e+02, 0.,
          3.3407723815119016e+02, 2.6650518594457941e+02, 0., 0., 1. ]
   distortion_vector: !!opencv-matrix # 1x4 distortion vector (fisheye model)
      rows: 1
      cols: 4
      dt: d
      data: [ 1.1763357579105141e-02, -5.1797112353852174e-03,
          2.6315580610037459e-03, 0. ]
   distortion_type: 1 # type of distortion model (0: perspective, 1: fisheye)
   camera_group: 0
   img_width: 1280
   img_height: 512
   camera_pose_matrix: !!opencv-matrix #4x4 extrinsic matrix
      rows: 4
      cols: 4
      dt: d
      data: [ 9.9999074801577947e-01, 7.7896180494682642e-04,
          -4.2304965841050025e-03, 1.9839157514973714e+01,
          -7.9020195036245652e-04, 9.9999616084980592e-01,
          -2.6559116188004227e-03, 6.1882118248103253e-02,
          4.2284114888848610e-03, 2.6592299929997965e-03,
          9.9998752443824268e-01, 1.8600285922272908e+00, 0., 0., 0., 1. ]  #4x4 extrinsic matrix, expressed in camera 0 referencial
  • Object 3D structure: calibrated_objects_data.yml
%YAML:1.0
---
object_0: #object index (if all boards have been seen, a single object should exist)
   points: !!opencv-matrix #3xn 3D structure of the object
      rows: 3
      cols: 16
      dt: f
      data: [ 0., 9.14999962e+00, 1.82999992e+01, 2.74499989e+01, 0.,
          9.14999962e+00, 1.82999992e+01, 2.74499989e+01, 0.,
          9.14999962e+00, 1.82999992e+01, 2.74499989e+01, 0.,
          9.14999962e+00, 1.82999992e+01, 2.74499989e+01, 0., 0., 0., 0.,
          9.14999962e+00, 9.14999962e+00, 9.14999962e+00, 9.14999962e+00,
          1.82999992e+01, 1.82999992e+01, 1.82999992e+01, 1.82999992e+01,
          2.74499989e+01, 2.74499989e+01, 2.74499989e+01, 2.74499989e+01,
          0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. ]
  • Object's poses: calibrated_objects_pose_data.yml The pose of the object (for all frames where boards are visible) with respect to the reference camera is provided in this file as a 6xn array. each row contains the Rodrigues angle-axis (3 floats) followed by the translation vector (3 floats).

  • Reprojection error log: reprojection_error_data.yml The reprojection error for each corner, camera and frame.

Samples of python code to read these files are provided in python_utils

Datasets

The synthetic and real datasets acquired for this paper are freely available via the following links: Real Data Synthetic Data

Contribution

Please follow docs/contributing.rst when introducing changes.

Comments
  • How to calibrate 360 camera

    How to calibrate 360 camera

    Hi,

    Tell me please what is the square_size? Square_length is measured length of every square. Marker_length is inside in each square. In my case 0.02m and 0.16m.

    In you example 0.04m, 0.03m and square_size 0.192m Why? And it is resolution X Y? Frame width and height?

    question 
    opened by vswdigitall 55
  • Faile to compiling the code like in the Installatio guide

    Faile to compiling the code like in the Installatio guide

    I try to Install MC-Calib like in the Installation Guide. Installing Docker and running the Image was successful. But I don't know what I could make probably wrong. Thanks in advance.

    CMake Error: The source directory "/kaist" does not appear to contain CMakeLists.txt. Specify --help for usage, or press the help button on the CMake GUI.

    make -j10
    make: *** No targets specified and no makefile found. Stop.

    question 
    opened by tobiasonkes 15
  • Problem of calling opencv function (cv::FileStorage)

    Problem of calling opencv function (cv::FileStorage)

    Hello, I 'd like to build this project on Ubuntu 16.04.5 with opencv4.5.4, gcc 5.4.0, cmake 3.5.1. I followed your Installation, then generating executable files successfully with your test data in Blender_images/Scenario_1 and calib_param_synth_Scenario1.yml. However there is an error what(): OpenCV(4.5.4) /data/opencv-4.5.4/modules/core/src/persistence.cpp:682: error: (-5:Bad argument) Input file is invalid in function 'open', whihc means there are something wrong with the code cv::FileStorage fs; fs.open(config_path, cv::FileStorage::READ); in Calibration.cpp .I have tried to use fopen to check the file config_path and it can be successfully opened.I also have checked the include and lib path of opencv in Cmakelist. I wonder how to deal with this problem.thanks.

    opened by RaZbliut0 6
  • Rectangular boards

    Rectangular boards

    Hello, I 'd like to clearify something. In all your example you use square calibration boards. Is that possible to use rectangular ones, for example, to calibrate non-overlapping vision system?

    documentation question 
    opened by Lashhev 5
  • An error occurred while compiling on ubuntu18.04

    An error occurred while compiling on ubuntu18.04

    When I tried to compile on Ubuntu18.04, the terminal returned the following error and failed to compile. What should I do about it?

    /usr/include/c++/7/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String >’: /usr/include/c++/7/type_traits:143:12: required from ‘struct std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > >’ /usr/include/c++/7/type_traits:154:31: required from ‘struct std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ /usr/include/c++/7/bits/unordered_set.h:98:63: required from ‘class std::unordered_setcv::String’ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/bits/hashtable_policy.h:87:34: error: no match for call to ‘(const std::hashcv::String) (const cv::String&)’ noexcept(declval<const _Hash&>()(declval<const _Key&>()))> ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/7/bits/move.h:54:0, from /usr/include/c++/7/bits/stl_pair.h:59, from /usr/include/c++/7/utility:70, from /usr/include/c++/7/array:38, from /usr/local/include/opencv2/core/cvdef.h:627, from /usr/local/include/opencv2/core.hpp:52, from /usr/local/include/opencv2/core/core.hpp:48, from /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:1: /usr/include/c++/7/type_traits: In instantiation of ‘struct std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’: /usr/include/c++/7/bits/unordered_set.h:98:63: required from ‘class std::unordered_setcv::String’ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/type_traits:154:31: error: ‘value’ is not a member of ‘std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > >’ : public __bool_constant<!bool(_Pp::value)> ^~~~~~~~~~~~~~~~ In file included from /usr/include/c++/7/unordered_set:48:0, from /usr/include/boost/pending/container_traits.hpp:27, from /usr/include/boost/graph/named_graph.hpp:23, from /usr/include/boost/graph/adjacency_list.hpp:37, from /home/devil/slam/calibration/MC-Calib/src/Graph.hpp:3, from /home/devil/slam/calibration/MC-Calib/src/Calibration.hpp:19, from /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:8: /usr/include/c++/7/bits/unordered_set.h: In instantiation of ‘class std::unordered_setcv::String’: /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/bits/unordered_set.h:98:63: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; ^~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:105:45: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::key_type key_type; ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:106:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::value_type value_type; ^~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:107:43: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::hasher hasher; ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:108:46: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::key_equal key_equal; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:109:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::allocator_type allocator_type; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:114:45: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::pointer pointer; ^~~~~~~ /usr/include/c++/7/bits/unordered_set.h:115:50: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_pointer const_pointer; ^~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:116:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::reference reference; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:117:52: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_reference const_reference; ^~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:118:46: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::iterator iterator; ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:119:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_iterator const_iterator; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:120:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::local_iterator local_iterator; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:121:57: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_local_iterator const_local_iterator; ^~~~~~~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:122:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::size_type size_type; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:123:52: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::difference_type difference_type; ^~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:282:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ operator=(initializer_list<value_type> __l) ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:375:2: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ emplace(_Args&&... __args) ^~~~~~~ /usr/include/c++/7/bits/unordered_set.h:419:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(const value_type& __x) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:423:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(value_type&& __x) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:478:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(initializer_list<value_type> __l) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:679:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ equal_range(const key_type& __x) ^~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:683:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ equal_range(const key_type& __x) const ^~~~~~~~~~~ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp: In member function ‘void Calibration::boardExtraction()’: /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:141:71: error: too many initializers for ‘std::unordered_setcv::String’ "jpeg", "jp2", "tiff"}; ^ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:161:24: error: ‘class std::unordered_setcv::String’ has no member named ‘find’ if (allowed_exts.find(cur_ext) != allowed_exts.end()) { ^~~~ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:161:54: error: ‘class std::unordered_setcv::String’ has no member named ‘end’ if (allowed_exts.find(cur_ext) != allowed_exts.end()) { ^~~ In file included from /usr/include/c++/7/bits/hashtable.h:35:0, from /usr/include/c++/7/unordered_map:47, from /usr/local/include/opencv2/flann/lsh_table.h:51, from /usr/local/include/opencv2/flann/lsh_index.h:51, from /usr/local/include/opencv2/flann/all_indices.h:44, from /usr/local/include/opencv2/flann/flann_base.hpp:45, from /usr/local/include/opencv2/flann.hpp:48, from /usr/local/include/opencv2/opencv.hpp:65, from /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:4: /usr/include/c++/7/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String >’: /usr/include/c++/7/type_traits:143:12: required from ‘struct std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > >’ /usr/include/c++/7/type_traits:154:31: required from ‘struct std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ /usr/include/c++/7/bits/unordered_set.h:98:63: required from ‘class std::unordered_setcv::String’ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/bits/hashtable_policy.h:87:34: error: no match for call to ‘(const std::hashcv::String) (const cv::String&)’ noexcept(declval<const _Hash&>()(declval<const _Key&>()))> ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/7/bits/move.h:54:0, from /usr/include/c++/7/bits/stl_pair.h:59, from /usr/include/c++/7/utility:70, from /usr/include/c++/7/array:38, from /usr/local/include/opencv2/core/cvdef.h:627, from /usr/local/include/opencv2/core.hpp:52, from /usr/local/include/opencv2/core/core.hpp:48, from /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:1: /usr/include/c++/7/type_traits: In instantiation of ‘struct std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’: /usr/include/c++/7/bits/unordered_set.h:98:63: required from ‘class std::unordered_setcv::String’ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/type_traits:154:31: error: ‘value’ is not a member of ‘std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > >’ : public __bool_constant<!bool(_Pp::value)> ^~~~~~~~~~~~~~~~ In file included from /usr/include/c++/7/unordered_set:48:0, from /usr/include/boost/pending/container_traits.hpp:27, from /usr/include/boost/graph/named_graph.hpp:23, from /usr/include/boost/graph/adjacency_list.hpp:37, from /home/devil/slam/calibration/MC-Calib/src/Graph.hpp:3, from /home/devil/slam/calibration/MC-Calib/src/Calibration.hpp:19, from /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:8: /usr/include/c++/7/bits/unordered_set.h: In instantiation of ‘class std::unordered_setcv::String’: /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:140:34: required from here /usr/include/c++/7/bits/unordered_set.h:98:63: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; ^~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:105:45: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::key_type key_type; ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:106:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::value_type value_type; ^~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:107:43: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::hasher hasher; ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:108:46: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::key_equal key_equal; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:109:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::allocator_type allocator_type; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:114:45: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::pointer pointer; ^~~~~~~ /usr/include/c++/7/bits/unordered_set.h:115:50: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_pointer const_pointer; ^~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:116:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::reference reference; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:117:52: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_reference const_reference; ^~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:118:46: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::iterator iterator; ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:119:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_iterator const_iterator; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:120:51: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::local_iterator local_iterator; ^~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:121:57: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::const_local_iterator const_local_iterator; ^~~~~~~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:122:47: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::size_type size_type; ^~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:123:52: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ typedef typename _Hashtable::difference_type difference_type; ^~~~~~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:282:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ operator=(initializer_list<value_type> __l) ^~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:375:2: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ emplace(_Args&&... __args) ^~~~~~~ /usr/include/c++/7/bits/unordered_set.h:419:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(const value_type& __x) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:423:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(value_type&& __x) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:478:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ insert(initializer_list<value_type> __l) ^~~~~~ /usr/include/c++/7/bits/unordered_set.h:679:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ equal_range(const key_type& __x) ^~~~~~~~~~~ /usr/include/c++/7/bits/unordered_set.h:683:7: error: ‘value’ is not a member of ‘std::_not<std::_and<std::__is_fast_hash<std::hashcv::String >, std::__detail::__is_noexcept_hash<cv::String, std::hashcv::String > > >’ equal_range(const key_type& x) const ^~~~~~~~~~~ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp: In member function ‘void Calibration::boardExtraction()’: /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:141:71: error: too many initializers for ‘std::unordered_setcv::String’ "jpeg", "jp2", "tiff"}; ^ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:161:24: error: ‘class std::unordered_setcv::String’ has no member named ‘find’ if (allowed_exts.find(cur_ext) != allowed_exts.end()) { ^~~~ /home/devil/slam/calibration/MC-Calib/src/Calibration.cpp:161:54: error: ‘class std::unordered_setcv::String’ has no member named ‘end’ if (allowed_exts.find(cur_ext) != allowed_exts.end()) { ^~~ CMakeFiles/calibrate.dir/build.make:110: recipe for target 'CMakeFiles/calibrate.dir/src/Calibration.cpp.o' failed make[2]: *** [CMakeFiles/calibrate.dir/src/Calibration.cpp.o] Error 1 CMakeFiles/Makefile2:129: recipe for target 'CMakeFiles/calibrate.dir/all' failed make[1]: *** [CMakeFiles/calibrate.dir/all] Error 2 tests/CMakeFiles/boost_tests_run.dir/build.make:136: recipe for target 'tests/CMakeFiles/boost_tests_run.dir//src/Calibration.cpp.o' failed make[2]: *** [tests/CMakeFiles/boost_tests_run.dir/__/src/Calibration.cpp.o] Error 1 CMakeFiles/Makefile2:181: recipe for target 'tests/CMakeFiles/boost_tests_run.dir/all' failed make[1]: *** [tests/CMakeFiles/boost_tests_run.dir/all] Error 2 Makefile:90: recipe for target 'all' failed make: *** [all] Error 2

    question 
    opened by 2017DEVIL 4
  • Try to Pull the image via Docker. Had Install Docker successfully but I got the Permission denied

    Try to Pull the image via Docker. Had Install Docker successfully but I got the Permission denied

    docker pull frameau/opencv-ceres Using default tag: latest Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=frameau%2Fopencv-ceres&tag=latest": dial unix /var/run/docker.sock: connect: permission denied

    opened by tobiasonkes 2
  • Open Access Paper

    Open Access Paper

    Hi, this looks very interesting. Is the paper https://doi.org/10.1016/j.cviu.2021.103353 somewhere available open access? Maybe on ArXiv or as download of the author's copy on your personal homepage?

    documentation 
    opened by NikolausDemmel 2
  • Error when generating the board

    Error when generating the board

    Hello,

    an error reported by a friend using MC-Calib on example data.

    When I try to replicate this error (with Docker) with the real data configuration, I face the same problem.

    MC-Calib_Error

    opened by rameau-fr 1
  • fix opencv init intrinsic calib

    fix opencv init intrinsic calib

    Fix the bug of OpenCV fisheye camera calibration error when points are too close to image's borders. Notes:

    • This fix only affect the fisheye cameras
    • The boards with corners too close to the borders are removed only for initialization using opencv calib but are taken into consideration properly during the remaining of the calibration process
    bug 
    opened by rameau-fr 0
  • feature/docker-with-all-tools-cpp17-multithreading

    feature/docker-with-all-tools-cpp17-multithreading

    This PR involves:

    • New lighter dockers for production and development using build stages. The production docker image is as light as possible to download faster. The development image contains all the necessary tools for development.
    • Upgrading CmakeLists.txt to c++17 (though it is still back-compatible with c++14)
    • Small changes to CmakeLists.txt to enable running on Mac M2
    • Multithreading detectBoards() to calibrate faster. On M2 original calibration of configs/Blender_Images/calib_param_synth_Scenario1.yml took 24 seconds, and with 2 threads (returned by std::thread::hardware_concurrency()) - 15 seconds. Thus, 9 seconds speedup.
    enhancement 
    opened by BAILOOL 0
  • Unable to run the pulled Image Run pulled image:

    Unable to run the pulled Image Run pulled image:

    docker run \

            --runtime=nvidia \
            -ti --rm \
            --network host \
            --gpus all \
            --env="DISPLAY" \
            --env="QT_X11_NO_MITSHM=1" \
            --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
            --volume="$HOME/.Xauthority:/home/$USER/.Xauthority:rw" \
            --volume="${PWD}:/home/$USER/MC-Calib" \
            --volume="PATH_TO_DATA:/home/$USER/MC-Calib/data" \
            frameau/opencv-ceres
    

    docker: Error response from daemon: Unknown runtime specified nvidia. See 'docker run --help'.

    this is maybe important to know. Enclose I add the Hardware info of the Computer I try to run MC-Calib.

    H/W path Device Class Description

                           system         Computer
    

    /0 bus Motherboard /0/0 memory 15GiB System memory /0/1 processor Intel(R) Core(TM) i5-6440HQ CPU @ 2.60 /0/100 bridge Xeon E3-1200 v5/E3-1500 v5/6th Gen Cor /0/100/1 bridge Xeon E3-1200 v5/E3-1500 v5/6th Gen Cor /0/100/1/0 display NVIDIA Corporation /0/100/1/0.1 multimedia NVIDIA Corporation /0/100/2 display HD Graphics 530 /0/100/4 generic Xeon E3-1200 v5/E3-1500 v5/6th Gen Cor /0/100/14 bus 100 Series/C230 Series Chipset Family /0/100/14.2 generic 100 Series/C230 Series Chipset Family /0/100/15 generic 100 Series/C230 Series Chipset Family /0/100/15.1 generic 100 Series/C230 Series Chipset Family /0/100/16 communication 100 Series/C230 Series Chipset Family /0/100/17 storage SATA Controller [RAID mode] /0/100/1c bridge 100 Series/C230 Series Chipset Family /0/100/1c/0 wlp2s0 network Wireless 8265 / 8275 /0/100/1c.2 bridge 100 Series/C230 Series Chipset Family /0/100/1c.2/0 generic RTS525A PCI Express Card Reader /0/100/1c.4 bridge 100 Series/C230 Series Chipset Family /0/100/1f bridge CM238 Chipset LPC/eSPI Controller /0/100/1f.2 memory Memory controller /0/100/1f.3 multimedia CM238 HD Audio Controller /0/100/1f.4 bus 100 Series/C230 Series Chipset Family /0/100/1f.6 enp0s31f6 network Ethernet Connection (5) I219-LM /1 virbr0-nic network Ethernet interface

    opened by tobiasonkes 0
  • Move origin to new point

    Move origin to new point

    Hi, can you help me to move origin?

    I have 5 cameras setup as before. And i've computed 3d center of this camera system. From your calibration origin is in camera0.

    How to transform pose matrices to move origin to real system center?

    Best regards, Viktor.

    opened by vswdigitall 0
  • Non-overlapping cameras calibration

    Non-overlapping cameras calibration

    System information (version)

    • Operating System / Platform = ubuntu 18.04
    • OpenCV = 4.2.0
    • Ceres = 2.0.0
    • Boost = 1.71.0
    • C++ = 14
    • Compiler = g++ 8.4.0

    Vision system

    • Number of cameras = 3
    • Types of cameras = perspective
    • Multicamera configurations = non-overlapping
    • Configuration file = GLAM.zip

    Describe the issue / bug

    Hello! Is it proper configuration when I use only 2 board to calibrate 3 non-overlapping cameras? Program throws this exception: "terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(4.2.0) ../modules/calib3d/src/calibration_handeye.cpp:705: error: (-215:Assertion failed) R_gripper2base_.size() >= 3 in function 'calibrateHandEye'"

    opened by Lashhev 2
  • error when run program

    error when run program

    i run your program with your pictures but when i run with my picture see see this error

    0011817 | 2022-05-08, 12:45:27.623355 [info] - Board extraction done! 0011818 | 2022-05-08, 12:45:27.623582 [info] - Intrinsic calibration initiated 0011819 | 2022-05-08, 12:45:27.623667 [info] - Initializing camera calibration using images 0011820 | 2022-05-08, 12:45:27.636724 [info] - NB of board available in this camera :: 535 0011821 | 2022-05-08, 12:45:27.636769 [info] - NB of frames where this camera saw a board :: 424 terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(4.5.4) ./modules/calib3d/src/fisheye.cpp:1400: error: (-215:Assertion failed) fabs(norm_u1) > 0 in function 'InitExtrinsics'

    Aborted (core dumped)

    opened by tavan95 9
Releases(v1.1.0)
  • v1.1.0(Sep 27, 2022)

    What's Changed

    • Multiple bug fixes occurring during fisheye camera calibration (#27), use of multiple board of various dimensions (#25)
    • Multi-threaded keypoint detection resulting in improved calibration time (#24)
    • Upgrading to C++17 and lighter docker images separated for production and development (#24)
    • Improved visualization of 3D points objects (#26)

    Full Changelog: https://github.com/rameau-fr/MC-Calib/compare/v1.0.0...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(May 20, 2022)

    MC-Calib is now faster (https://github.com/rameau-fr/MC-Calib/pull/7), more robust (https://github.com/rameau-fr/MC-Calib/pull/1, https://github.com/rameau-fr/MC-Calib/pull/2, https://github.com/rameau-fr/MC-Calib/pull/3 https://github.com/rameau-fr/MC-Calib/pull/9, https://github.com/rameau-fr/MC-Calib/pull/14, https://github.com/rameau-fr/MC-Calib/pull/16, https://github.com/rameau-fr/MC-Calib/pull/17) and memory-efficient (https://github.com/rameau-fr/MC-Calib/pull/10).

    Full Changelog: https://github.com/rameau-fr/MC-Calib/commits/v1.0.0

    Source code(tar.gz)
    Source code(zip)
Owner
null
the implementations of 'A Flexible New Technique for Camera Calibration' and Bouguet's method

StereoCameraCalibration MonocularCameraCalibration/StereoCameraCalibration/StereoCameraRectification 1、Class "MonocularCameraCalibration" provides the

gtc1072 8 Nov 3, 2022
This package estimates the calibration parameters that transforms the camera frame (parent) into the lidar frame (child)

Camera-LiDAR Calibration This package estimates the calibration parameters that transforms the camera frame (parent) into the lidar frame (child). We

Australian Centre for Field Robotics 211 Nov 25, 2022
Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing

Apache Arrow Powering In-Memory Analytics Apache Arrow is a development platform for in-memory analytics. It contains a set of technologies that enabl

The Apache Software Foundation 10.7k Nov 27, 2022
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.

RRxIO - Robust Radar Visual/Thermal Inertial Odometry RRxIO offers robust and accurate state estimation even in challenging visual conditions. RRxIO c

Christopher Doer 62 Nov 30, 2022
Robust multi-prompt delimited control and effect handlers in C/C++

libmprompt Note: The library is under development and not yet complete. This library should not be used in production code. Latest release: v0.2, 2021

Koka Language and Related Tools 92 Nov 18, 2022
Wykobi is an efficient, robust and simple to use multi-platform 2D/3D computational geometry library.

Description Wykobi is an efficient, robust and simple to use multi-platform 2D/3D computational geometry library. Wykobi provides a concise, predictab

Arash Partow 131 Oct 24, 2022
Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist.

Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist. Attention This library is still under development! Read the docs and ch

everdrone 81 Nov 25, 2022
Fast and Accurate Extrinsic Calibration for Multiple LiDARs and Cameras

Fast and Accurate Extrinsic Calibration for Multiple LiDARs and Cameras The pre-print version of our paper is available here. The pre-release code has

HKU-Mars-Lab 240 Nov 24, 2022
Zero-Knowledge Proof Toolbox

Zkrypt是一个开源的C语言零知识证明算法库,旨在向用户提供简洁、高效的非交互式零知识证明协议接口,用户可以通过调用接口实现完整的零知识证明协议的流程,包括公共参数设置、证明生成和验证等步骤。 本项目由北京大学关志的密码学研究组开发维护。 特性 支持多种零知识证明协议(包括Groth16, Plo

Zhi Guan 14 Dec 1, 2022
A long-read analysis toolbox for cancer genomics

Lorax: A long-read analysis toolbox for cancer genomics In cancer genomics, long-read de novo assembly approaches may not be applicable because of tum

Tobias Rausch 11 Oct 26, 2022
This repo contains source code of our paper presented in IROS2021 "Single-Shot is Enough: Panoramic Infrastructure Based Calibration of Multiple Cameras and 3D LiDARs"

Single-Shot is Enough: Panoramic Infrastructure Based Calibration of Multiple Cameras and 3D LiDARs Updates [2021/09/01] first commit, source code of

Alibaba 78 Nov 25, 2022
Project to create a teensy based gamecube controller with hall effect sensors, snapback filtering, and notch calibration

PhobGCC Gamecube controller motherboard using a teensy as the microcontroller. Aim is to make an accessible and consistent controller. Has the option

null 93 Dec 1, 2022
Dwm_lut - Apply 3D LUTs to the Windows desktop for system-wide color correction/calibration

About This tool applies 3D LUTs to the Windows desktop by hooking into DWM. It works in both SDR and HDR modes, and uses tetrahedral interpolation on

null 199 Nov 24, 2022
CS:APP is an excellent material for learning computer systems and systems programming

CS:APP is an excellent material for learning computer systems and systems programming. However, it is inconvenient to use a virtual machine for self-learners. In this repo, I build a Docker image with most pre-requistes installed and attached all lab materials in it.

Guochao Xie 57 Nov 11, 2022
Exploring the Design Space of Page Management for Multi-Tiered Memory Systems (USENIX ATC'21)

AutoTiering This repo contains the kernel code in the following paper: Exploring the Design Space of Page Management for Multi-Tiered Memory Systems (

Computer Systems Laboratory @ Ajou University 19 Nov 14, 2022
[WIP] Differentiable Simulation of Soft Multi-body Systems (NeurIPS 2021)

Differentiable Simulation of Soft Multi-body Systems Yi-Ling Qiao, Junbang Liang, Vladlen Koltun, Ming C. Lin [Paper] [Code] Updates The C++ backend s

YilingQiao 24 Oct 9, 2022
Multi-dimensional dynamically distorted staggered multi-bandpass LV2 plugin

B.Angr A multi-dimensional dynamicly distorted staggered multi-bandpass LV2 plugin, for extreme soundmangling. Based on Airwindows XRegion. Key featur

null 21 Nov 7, 2022
Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU.

Unicorn Engine Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU. Unicorn offers some unparalleled fe

lazymio 1 Nov 7, 2021
weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

Google Project Zero 2k Dec 1, 2022