2015-04-08 7 views
0

Я новичок в OPENCV, я пытаюсь сравнить два изображения, так что я использовал absdiff функции на два Мастут изображений, но это сравнение легко влияет освещения и люминесценции, могли бы вы посоветовать мне что-нибудь более надежный?OpenCV сравнения изображений

+1

возможно дубликат [Простого и быстрого метод сравнения изображений для подобия] (http://stackoverflow.com/questions/4196453/simple-and-fast-method-to-compare-images -for-сходство) – NathanOliver

ответ

2

Существует несколько методов для сравнения двух изображений, и лучший метод действительно зависит от вашей желаемой точности и применения.

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

cv::equalizeHist(src, dst); 

Более сложные методы связаны с использованием детекторов функций, а затем делать согласование функций. Простой метод OpenCV предлагает, если FLANN. По существу он идентифицирует легко узнаваемые области изображения (т. Е. Углы) и ищет шаблоны в другом изображении.

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

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

Docs: http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html#feature-flann-matcher

+0

Спасибо, что ответили на вопрос, я пробовал использовать оба метода, они эффективны, но поскольку я вычисляю значения пикселей в матрице вывода и пытаюсь получить математическое значение, я думаю, что это требует большей стабильности .. Я читал о нормализованной кросс-корреляции (NCC), которая может быть лучше при создании стабильного результата, чем absDiff. Есть ли какая-либо функция для сравнения двух матриц размера NCC? –

+0

Обратитесь к этому вопросу для примера кода http://stackoverflow.com/questions/11321316/how-to-use-opencvs-normalized-correlation :) – user1646196

+0

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