В настоящее время я работаю над стереообработкой, используя opencv2.3 и стереокамеру Pointgrey Bumblebee2 в качестве устройства ввода. Получение изображений осуществляется через libdc1394.
Мой код для выпрямления и стереообработки следующий:
void StereoProcessing::calculateDisparityMap(const Mat &left, const Mat &right, Mat &disparity_map)
Mat map11, map12, map21, map22, left_rectified, right_rectified, disp16;
// Computes the undistortion and rectification transformation maps
initUndistortRectifyMap(this->camera_matrix1,
this->distance_coefficients1,
this->R1,
this->P1,
this->output_image_size,
CV_16SC2,
map11,
map12);
initUndistortRectifyMap(this->camera_matrix2,
this->distance_coefficients2,
this->R2,
this->P2,
this->output_image_size,
CV_16SC2,
map21,
map22);
// creates rectified images
remap(left, left_rectified, map11, map12, INTER_LINEAR);
remap(right, right_rectified, map21, map22, INTER_LINEAR);
// calculates 16-bit disparitymap
this->stereo_bm(left_temp, right_temp, disp16);
disp16.convertTo(disparity_map, CV_8U, 255 / (this->stereo_bm.state->numberOfDisparities * 16.0));
}
Это отлично работает, за исключением черной левой границы на карте несоответствия, которая выглядит следующим образом:
Входные изображения - эти два - неисправленные, как вы можете видеть;): ://i.stack.imgur.com/FT0GW.png" alt="правильно неисправленное изображение">
Итак, мой вопрос: это нормальное поведение? Или вы видите какую-либо ошибку, которую я сделал до сих пор? Как другая информация, исправление работает нормально