Построение карт стереодиспаратности

 














Лабораторная работа

Построение карт стереодиспаратности



Цель работы: изучить корреляционные методы стереозрения для получения плотных карт глубины, установить особенности и ограничения их использования; исследовать влияние используемых размеров окна корреляции и диапазона допустимых стереодиспаратностей.

Задачи:

1.Изучить теоретическую часть работы.

.Реализовать корреляционный алгоритм стереозрения с использованием корреляции Пирсона.

.Провести исследование разработанного алгоритма на нескольких стереопарах с различными характерными значениями диспаратности, используя разные размеры корреляционного окна и значения диапазона допустимых стереодиспаратностей.

Экспериментальная часть:

Листинг программы, реализующей построение карты диспаратности подаваемой на вход стереопары, представлен в приложении 1. На рис. 1-5 представлены примеры исходных стереопар.


Рис. 1. Исходная стереопара. Статуя льва



Рис. 2. Исходная стереопара. Березовая роща


Рис. 3. Исходная стереопара. Трехмерные фигуры


Рис. 4. Исходная стереопара. Смотровая башня


Рис. 5. Исходная стереопара. Помещение

стереозрение корреляция стереодиспаратность

Построение карт стереодиспаратностей проводилось при помощи корреляционного алгоритма, основанного на сопоставлении всех точек двух изображений, представленных на стереопаре. Две точки сопоставлялись в том случае, если коэффициент корреляции между пикселями, расположенными в прямоугольнике некоторого размера, очерченном вокруг этих точек, в пределах некоторого диапазона сдвига максимален и превышает некоторый наперед заданный порог. Диапазон сдвига на представленных ниже изображениях равен размеру корреляционного окна по оси абсцисс.

На рис. 6-10 представлены результаты построения карт стереодиспаратностей для представленных выше стереопар при различных размерах корреляционного окна при нулевом пороге допустимого для сопоставления точек значения коэффициента корреляции.


Исходное изображениеОкно: 20Ч2. Порог: 0


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч20. Порог: 0Окно: 40Ч4. Порог: 0

Рис. 6. Исходное изображение и набор карт стереодиспаратностей, полученных при различных размерах корреляционного окна при нулевом пороге порога допустимого значения коэффициента корреляции



Исходное изображениеОкно: 10Ч2. Порог: 0


Окно: 20Ч2. Порог: 0Окно: 10Ч10. Порог: 0



Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч20. Порог: 0Окно: 40Ч4. Порог: 0

Рис. 7. Исходное изображение и набор карт стереодиспаратностей, полученных при различных размерах корреляционного окна при нулевом пороге порога допустимого значения коэффициента корреляции



Исходное изображениеОкно: 10Ч2. Порог: 0


Окно: 20Ч2. Порог: 0Окно: 10Ч10. Порог: 0


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч20. Порог: 0Окно: 40Ч4. Порог: 0

Рис. 8. Исходное изображение и набор карт стереодиспаратностей, полученных при различных размерах корреляционного окна при нулевом пороге порога допустимого значения коэффициента корреляции


Исходное изображениеОкно: 10Ч2. Порог: 0


Окно: 20Ч2. Порог: 0Окно: 10Ч10. Порог: 0


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0



Окно: 20Ч20. Порог: 0Окно: 40Ч4. Порог: 0

Рис. 9. Исходное изображение и набор карт стереодиспаратностей, полученных при различных размерах корреляционного окна при нулевом пороге порога допустимого значения коэффициента корреляции


Исходное изображениеОкно: 20Ч2. Порог: 0


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч20. Порог: 0Окно: 40Ч4. Порог: 0

Рис. 10. Исходное изображение и набор карт стереодиспаратностей, полученных при различных размерах корреляционного окна при нулевом пороге порога допустимого значения коэффициента корреляции


На рис. 6 хорошо заметна выделяющаяся из фона фигура льва, что говорит о том, что карта стереодиспаратностей восстановлена правильно. Следует обратить внимание на качество построенной карты (ее гладкость и плотность) в зависимости от размера корреляционного окна, при помощи которого осуществлялось корреляционное сопоставление точек изображений исходной стереопары.

Наилучшие результаты были получены при длине окна (размер по оси абсцисс), равный 20 пикселям. При меньшем размере окна по оси абсцисс результаты построения карты стереодиспаратностей для некоторых изображений теряют репрезентативность. Это происходит из-за того, что расстояние между одними и теми же точками на двух изображениях больше размера корреляционного окна по оси абсцисс. Можно заметить, что дальнейшее увеличение размера корреляционного окна по оси абсцисс ведет к падению разрешения на восстановленной карте стереодиспаратностей.

Видно, что при увеличении размера окна по оси ординат увеличивается гладкость построенной карты стереодиспаратностей. Это происходит благодаря более точному расчету коэффициента корреляции по большему числу точек. Однако увеличение количества точек, использованных при расчете коэффициента корреляции, ведет к снижению быстродействия алгоритма. При значительном увеличении размера корреляционного окна по оси ординат происходит потеря разрешающей способности и снижается качество восстановленной карты стереодиспаратностей, происходит размывание границ объектов.

Следует отметить, что меньший размер корреляционного окна так же способствует разрешению на карте стереодиспаратностей мелких деталей (например, деревья на заднем плане на рис. 9).

На рис. 11-15 представлены результаты построения карт диспаратности при учете только тех точек, коэффициент корреляции которых при сопоставлении, превышает некоторый порог.


Исходное изображение



Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч4. Порог: 0.5Окно: 20Ч10. Порог: 0.5



Окно: 20Ч4. Порог: 0.9Окно: 20Ч10. Порог: 0.9

Рис. 11. Исходное изображение и набор карт стереодиспаратностей, полученных при различных порогах допустимого значения коэффициента корреляции


Исходное изображение



Окно: 10Ч2. Порог: 0Окно: 10Ч10. Порог: 0


Окно: 10Ч2. Порог: 0.5Окно: 10Ч10. Порог: 0.5


Окно: 10Ч2. Порог: 0.9Окно: 10Ч10. Порог: 0.9


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч4. Порог: 0.5Окно: 20Ч10. Порог: 0.5


Окно: 20Ч4. Порог: 0.9Окно: 20Ч10. Порог: 0.9

Рис. 12. Исходное изображение и набор карт стереодиспаратностей, полученных при различных порогах допустимого значения коэффициента корреляции


Исходное изображение


Окно: 10Ч2. Порог: 0Окно: 10Ч10. Порог: 0



Окно: 10Ч2. Порог: 0.5Окно: 10Ч10. Порог: 0.5


Окно: 10Ч2. Порог: 0.9Окно: 10Ч10. Порог: 0.9


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч4. Порог: 0.5Окно: 20Ч10. Порог: 0.5



Окно: 20Ч4. Порог: 0.9Окно: 20Ч10. Порог: 0.9

Рис. 13. Исходное изображение и набор карт стереодиспаратностей, полученных при различных порогах допустимого значения коэффициента корреляции


Исходное изображение




Окно: 10Ч2. Порог: 0Окно: 10Ч10. Порог: 0


Окно: 10Ч2. Порог: 0.5Окно: 10Ч10. Порог: 0.5


Окно: 10Ч2. Порог: 0.9Окно: 10Ч10. Порог: 0.9



Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч4. Порог: 0.5Окно: 20Ч10. Порог: 0.5


Окно: 20Ч4. Порог: 0.9Окно: 20Ч10. Порог: 0.9

Рис. 14. Исходное изображение и набор карт стереодиспаратностей, полученных при различных порогах допустимого значения коэффициента корреляции



Исходное изображение


Окно: 20Ч4. Порог: 0Окно: 20Ч10. Порог: 0


Окно: 20Ч4. Порог: 0.5Окно: 20Ч10. Порог: 0.5



Окно: 20Ч4. Порог: 0.9Окно: 20Ч10. Порог: 0.9

Рис. 15. Исходное изображение и набор карт стереодиспаратностей, полученных при различных порогах допустимого значения коэффициента корреляции


Полученные результаты показывают, что выбор порога допустимого коэффициента корреляции зависит от параметров изображений. Высокий порог, как показано на рис. 12 и 15 в значительной мере сократить влияние шумов и оставить только полезную информацию на восстановленной карте стереодиспаратностей. Однако данные на рис. 11, 13 и 14 показывают, что такой же высокий порог ведет и к отсечению полезной информации и значительно уменьшает плотность восстановленной карты стереодиспаратностей.


Вывод


В работе был реализован корреляционный алгоритм построения карты диспаратности по стереопарам, полученным при помощи двух камер, смещенных друг относительно друга по оси абсцисс. Проведена проверка работоспособности алгоритма на различных стереопарах. Представлены результаты исследования качества работы алгоритма в зависимости от размера окна, в котором рассчитывается коэффициент корреляции и допустимого значения коэффициента корреляции.

Показано, что для различных сцен необходим адаптивный выбор размера корреляционного окна по оси абсцисс, который зависит от размера стереобазы и расстояния до объектов, диспаратность которых вычисляется. Рассмотрен эффект уменьшения разрешения построенной карты стереодиспаратностей при излишнем увеличении размера корреляционного окна по осям абсцисс и ординат (рис. 6-10). Рассмотрено положительное влияние увеличения размера корреляционного окна по оси ординат на плотность и качество построенной карты стереодиспаратностей (рис. 6-10).

Продемонстрировано, что высокий порог допустимого значения коэффициента корреляции пригоден (и позволяет получить качественные результаты с минимальным количеством шума) для изображений сцен, содержащих четко очерченные фигуры (имеющие четкие границы) с минимальными перепадами яркости внутри них. Для изображений сцен, содержащих множество мелких деталей (например, сцены природы) больше подходит низкий порог допустимого значений коэффициента корреляции, т.к. позволяет повысить плотность построенной карты стереодиспаратностей.



Приложение


Листинг программы, реализующей построение карты стереодиспаратностей подаваемой на вход стереопары на языке программирования C++ с использованием библиотеки OpenCV версии 2.3.1

Программа состоит из нескольких файлов. Исполняемая часть находится в конце приложения.

Файл «opencv2.h» (Содержит объявления некоторых общих вспомогательных функций и вход в пространство имен cv. Включен в каждый файл программы)

#ifndef OPENCV2_H_

#define OPENCV2_H_


#include «opencv\cv.h»

#include «opencv\highgui.h»

namespace cv;

fillMat (Mat &mat, float color); // Закрасить матрицу типа float одним цветом


#endif


Файл «opencv2.cpp» (Содержит реализацию вспомогательных функций, объявленных в «opencv2.h»).

#include «opencv2.h»

#include <stdio.h>

#include <vector>

#include <math.h>


// Реализация вспомогательных функций, объявленных в opencv2.h

void fillMat (Mat &mat, float color)

{(int y = 0; y < mat.rows; y++)(int x = 0; x < mat.cols; x++).at<float>(y, x) = color;

}


Файл «correlation.h» (Содержит объявления функции вычисления коэффициента корреляции и вспомогательных функций)

#ifndef CORRELATION_H

#define CORRELATION_H


#include «opencv2.h»

#include <stdio.h>

#include <windows.h>

#include <math.h>

getCorrelationCoef (const Mat &mat1, const Mat &mat2);var (const Mat &mat);getMax (const Mat &mat);


#endif


Файл «correlation.cpp» (Содержит определения функции вычисления коэффициента корреляции и вспомогательных функций, объявленных в «correlation.h»).

#include «correlation.h»

#include «opencv2.h»

#include <stdio.h>

#include <windows.h>

#include <math.h>

getCorrelationCoef (const Mat &mat1, const Mat &mat2)

{m1 = 0;m2 = 0;(int y = 0; y < mat1.rows; y++)

{(int x = 0; x < mat1.cols; x++)

{+= mat1.at<float>(y, x);+= mat2.at<float>(y, x);

}

}/= mat1.rows*mat1.cols;/= mat2.rows*mat2.cols;d1 = 0;d2 = 0;c = 0;(int y = 0; y < mat1.rows; y++)

{(int x = 0; x < mat1.cols; x++)

{tmp1 = (mat1.at<float>(y, x) - m1);tmp2 = (mat2.at<float>(y, x) - m2);+= tmp1*tmp1;+= tmp2*tmp2;+= tmp1*tmp2;

}

}= sqrt(d1);= sqrt(d2);/= d1*d2;c;

}

var (const Mat &mat)

{m = 0;(int y = 0; y < mat.rows; y++)(int x = 0; x < mat.cols; x++)+= mat.at<float>(y, x);/= mat.rows*mat.cols;d = 0;(int y = 0; y < mat.rows; y++)(int x = 0; x < mat.cols; x++)+= (mat.at<float>(y, x) - m)*(mat.at<float>(y, x) - m);/= mat.rows*mat.cols;d;

}

getMax (const Mat &mat)

{d = -100000000;(int y = 0; y < mat.rows; y++)(int x = 0; x < mat.cols; x++)(d < mat.at<float>(y, x))= mat.at<float>(y, x);

return d;

}


Файл «main.cpp» (Содержит основной код программы и функцию, строящую карту стереодиспаратностей с учетом заданных параметров).

#include «opencv2.h»

#include <stdio.h>

#include <windows.h>

#include «correlation.h»

makeDispMap (Mat &mat1, Mat &mat2, int x_size, int y_size, float treshold)

{res (mat1.rows, mat1.cols, CV_32FC1);(int y = y_size/2; y < res.rows-y_size/2-1; y++)

{(«\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%.2f%%», (double) (y - y_size/2)/(res.rows-1)*100);(int x = x_size; x < res.cols-x_size-1; x++)

{max_value = -1;max_shift_x = 0;c = 0;dy = 0;

//for (int dy = - y_size/2; dy < y_size/2; dy++)

// {(int dx = - x_size; dx < 0; dx++)

{= getCorrelationCoef ((Rect (x, y-y_size/2, x_size, y_size)),(Rect(x+dx, y-y_size/2, x_size, y_size)));

//imshow («img1», mat1 (Rect(x, y-y_size/2, x_size, y_size)));

//imshow («img2», mat2 (Rect(x+dx, y-y_size/2, x_size, y_size)));

//waitKey(1);

//printf («%d % d % f\n», x, dx, c);(max_value < c)

{_value = c;_shift_x = dx;

}

}

// }

//printf («%f\n», max_value);

//imshow («img1», mat1 (Rect(x, y-y_size/2, x_size, y_size)));

//imshow («img2», mat2 (Rect(x+max_shift_x, y-y_size/2, x_size, y_size)));

//waitKey(1);(max_value > treshold).at<float>(y, x) = - max_shift_x;.at<float>(y, x) = 0;

}

//imshow («map», res);(1);

}(«map»);(«\n»);res;

}

main()

{img = imread («1.jpg», CV_LOAD_IMAGE_GRAYSCALE);img1 = img (Rect(0, 0, img.cols/2, img.rows));img2 = img (Rect(img.cols/2, 0, img.cols/2, img.rows));mat1;mat2;.convertTo (mat2, CV_32FC1, 1./255);.convertTo (mat1, CV_32FC1, 1./255);(«img», mat1);(0);(«img», mat2);(0);

(«img»);res = makeDispMap (mat1, mat2, 20, 4, 0);(res, res, 0, 1, CV_MINMAX);(«res», res);(«img», mat1);

(res, res, 0, 255, CV_MINMAX);(mat1, mat1, 0, 255, CV_MINMAX);

(«res.bmp», res);

(«left.bmp», mat1);

waitKey(0);

}


Лабораторная работа Построение карт стереодиспаратности Цель работы: изучить корреляционные ме

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ