Недостающий регион на карте несоответствия

В настоящее время я работаю над обработкой стерео с использованием 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));
}

Это прекрасно работает, за исключением черной левой границы на карте диспаратности, которая выглядит следующим образом:

Карта диспаратности с черной рамкой слева

Входными изображениями являются эти два - как вы можете не видеть;):оставил неопознанное изображениеправое неопознанное изображение

Итак, мой вопрос сейчас: это нормальное поведение? Или вы видите какую-либо ошибку, которую я сделал до сих пор? Как другая информация, исправление работает отлично

2 ответа

Решение

Ширина отсутствующей области эквивалентна количеству несоответствий, используемых в stereo_bm. Это нормальный побочный продукт stereo_bm algorithm,

Я думаю, что это происходит потому, что алгоритм вычисляет диспаратность путем сопоставления блоков вокруг пикселей от левого изображения с блоками вокруг пикселей в той же строке на правом изображении (при условии, что изображения выпрямлены). Поскольку существует область, в которой нет перекрытия между видами с левой камеры и с правой камеры, алгоритм не может найти соответствие для блоков вокруг пикселей в этой области. Ширина "отсутствующей" области равна параметру "количество различий", потому что алгоритм прекращает попытки сопоставить данный блок после попыток "количества различий" (в той же горизонтальной строке, что и пиксель на левом изображении). Мне жаль, если я не достаточно ясно Если вы хотите получить более подробную информацию о том, как это работает, см. Некоторый код на http://siddhantahuja.wordpress.com/2010/04/11/correlation-based-similarity-measures-summary/.

Другие вопросы по тегам