2013-05-17 4 views
2

Использование this изображение в качестве ссылки Я хочу найти грязное пятно внизу this изображение.Различия между двумя изображениями

Мне удалось превратить второе изображение в тот же масштаб и ориентацию, а теперь попробуйте найти место, используя absdiff, но так как изображения не идеально подходят, у меня есть края на diff image.

Я думаю, что вместо разницы между пикселями с одинаковыми координатами мне нужно найти минимальную разницу в области, такой как n на n пикселей. Итак, вопрос в том, имеет ли OpenCV что-то buitin для этого и/или есть лучшее решение проблемы?

EDIT: Решение с использованием threshold и erode:

public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1, 
            Image<Bgr, byte> image2, 
            int erodeIterations=2) 
{ 
    return Diff(image1, image2, new Bgr(50, 50, 50), erodeIterations); 
} 

public static Image<Bgr, Byte> Diff(Image<Bgr, Byte> image1, 
            Image<Bgr, byte> image2, 
            Bgr thresholdColor, 
            int erodeIterations) 
{ 

    var diff = image1.AbsDiff(image2); 
    diff = diff.ThresholdToZero(thresholdColor); 
    diff = diff.Erode(erodeIterations); 
    return diff; 
} 

ответ

3

Не уверен, OpenCV, но решение этой проблемы не должно быть трудно. Совместите два изображения и найдите разное изображение, как вы уже сделали. Используйте скользящее окно NxN по разностному изображению и вычислите количество пикселей, которые значительно, разные в пределах окна, т.е. игнорируют различия до 10 уровней серого. Найдите максимумы этих сумм по всему изображению, и это должно подчеркнуть, что вам нужно.

+0

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

+0

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

+0

У меня есть твоя идея, она может работать лучше, чем я. – Igonato

1

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

+0

Есть ли что-то встроенное для этого? – Igonato

Смежные вопросы