Вычисление несоответствия двух похожих изображений в Matlab

У меня есть два изображения (оба точно такие же изображения), и я пытаюсь вычислить несоответствие между ними, используя сумму квадратов расстояний и реконструировать несоответствие в трехмерном пространстве. Нужно ли исправлять изображение перед вычислением несоответствия?

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

For each pixel in the left image X, 
   Take the pixels in the same row in the right image.
   Separate the row in right image to windows.
   For each window,
     Calculate the disparity for each pixel in that window with X
     Select the pixel in the window which gives minimum SSD with X
   Find the pixel with minimum disparity among all windows as the best match to X

Я делаю это правильно?

Как я могу визуализировать 3D-реконструкцию несоответствия в виде графика рассеяния в Matlab?


person User1234321232    schedule 02.04.2014    source источник


Ответы (2)


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

Теперь давайте посмотрим, что вы имели в виду под теми же изображениями. Вы имели в виду изображения одного и того же объекта, сделанные с разных точек зрения? Обратите внимание, что если изображения буквально одинаковы (одинаковые точки зрения), несоответствие будет равно нулю, как было отмечено в другом ответе. Определение несоответствия (для горизонтально разделенных камер) — это значение сдвига (в одной строке) между совпадающими объектами. Несоответствие связано с глубиной (если оптические оси камер параллельны) как несоответствие d=f*B/z, где z - глубина, B - базовая линия или расстояние между камерами, а f - фокусное расстояние. Вы можете преобразовать приведенную выше формулу в несоответствие / B = f / z, что в основном говорит о том, что несоответствие, связанное с разделением камер, поскольку фокусное расстояние связано с расстоянием. Другими словами, отношения мер по горизонтали и расстояний равны.

введите здесь описание изображения

Если ваши изображения сделаны с камерами, смещенными по горизонтали, несоответствие (в простом алгоритме корреляции) обычно рассчитывается с помощью 5 встроенных циклов:

loop over image1 y  
   loop over image1 x  
      loop over disparity d  
         loop over correlation window y  
            loop over correlation window x  

Несоответствие, или D_best, дает вам наилучшее соответствие окна между изображением1 и изображением2 по всем возможным значениям d. Наконец, диаграммы рассеяния предназначены для трехмерных облаков точек, в то время как несоответствие может быть скорее визуализировано в виде карты цветов тепла. Если вам нужно визуализировать 3D-реконструкцию или просто сказать 3D-облако точек, рассчитайте X, Y, Z как: Z=fB/D, X=uZ/f, Y=v*Z/f , где u и v связаны со столбцом и строкой изображения wxh как u=col-w/2 и v=h/2-row, то есть u, v образуют центрированную систему координат изображения.

person Vlad    schedule 03.04.2014

Если ваши два изображения абсолютно одинаковы, то несоответствие будет равно 0 для каждого пикселя. Вы должны либо использовать две отдельные камеры для съемки изображений, либо делать их одной камерой из двух разных мест. Лучший способ сделать 3D-реконструкцию — использовать откалиброванную стереопару камер. Вот пример того, как это сделать с помощью Computer Vision. Системный набор инструментов для MATLAB.

person Dima    schedule 02.04.2014