This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TIDA-00254的标定板问题

Other Parts Discussed in Thread: DLP-ALC-LIGHTCRAFTER-SDK

各位大佬好,萌新有一个问题请教。官方Demo生成的标定板是(150,150,150)的灰色的,之前打印的误差有点大。为了提高精度,我定制了一款黑白的标定板。在系统标定(第5步)时,投射出的投影仪标定图案和标定板重合,所以总是不成功,该如何解决?是不是这步的标定不能用黑白板?谢谢!

  • 提供不成功的错误信息, 应该有提示对应代码中有调试信息.您的checkerboard使用什么灰度的如果不用150?
  • 在 DLP-ALC-LIGHTCRAFTER-SDK-2.0\DLP-ALC-LIGHTCRAFTER-SDK\src\calibration

    calibration_camera.cpp

    749行有检测checker board的function,反馈每个对应的错误信息的.

    Calibration::Camera::AddCalibrationBoard

    // Check the image resolution
    this->debug_.Msg("Checking calibration image resolution...");
    unsigned int rows = 0;
    unsigned int cols = 0;
    calib_image.GetRows(&rows);
    calib_image.GetColumns(&cols);

    if((rows != this->image_rows_.Get()) ||
    (cols != this->image_columns_.Get())){
    return ret.AddError(CALIBRATION_IMAGE_RESOLUTION_INVALID);
    }

    // Copy the image
    this->debug_.Msg("Copying calibration image...");
    dlp::Image temp_calibration_image;
    temp_calibration_image.Create(calib_image);

    // If the image is RGB convert it to greyscale
    this->debug_.Msg("Converting calibration image to monochrome...");

    if(temp_calibration_image.ConvertToMonochrome().hasErrors())
    return ret.AddError(CALIBRATION_IMAGE_CONVERT_TO_MONO_FAILED);

    // Convert dlp::Image to cv::Mat
    cv::Mat calibration_image_cv;
    temp_calibration_image.GetOpenCVData(&calibration_image_cv);

    // Look for the chessboard (checkerboard corners
    this->debug_.Msg("Looking for chessboard corners in calibration image...");
    std::vector<cv::Point2f> board_feature_locations_xy;
    cv::Size board_feature_size(this->board_columns_.Get(),this->board_rows_.Get());
    if (cv::findChessboardCorners(calibration_image_cv,
    board_feature_size,
    board_feature_locations_xy,
    CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS )){

    this->debug_.Msg("Chessboard corners found");
    this->debug_.Msg("Refining corner locations...");

    // Board was found. Refine the corner positions
    // NOTE : Many of these arguments would be good parameter settings for calibration
    cv::cornerSubPix(calibration_image_cv,
    board_feature_locations_xy,
    cv::Size(11, 11),
    cv::Size(-1, -1),
    cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));

    // Return success as true and increment counter
    (*success) = true;
    this->board_number_successes_++;

    // Add this calibration image's corners to the list
    this->image_points_xy_.push_back(board_feature_locations_xy);
    this->object_points_xyz_.push_back(this->calibration_board_feature_points_xyz_);

    this->debug_.Msg("Calibration image added");
    }
    else{
    this->debug_.Msg("No chessboard corners found in calibration image");
    (*success) = false;
    ret.AddError(CALIBRATION_BOARD_NOT_DETECTED);
    }

    // Release the cv image
    calibration_image_cv.release();

    return ret;

  • 您好,谢谢回复。它的提示就是找不到标定板,然后给出了几条建议什么的。我用的是(0,0,0)的标定板

  • DLP_3D_SDK_DLP4500.pdf按照提示的信息更改,通常的问题点参考附件.