Определить различия между двумя почти одинаковыми фотографиями

Это довольно широкий вопрос; какие инструменты / библиотеки существуют, чтобы сделать две фотографии, которые не идентичны, но чрезвычайно похожи, и определить конкретные различия между ними?

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

какие инструменты я могу использовать для создания различий изображений или третьего теплового изображения различий? Есть ли инструменты для .NET?

7 ответов


Проверьте Андрея Кириллова статьи на CodeProject. Он написал приложение c#, используяAForge.NET библиотека компьютерного зрения для обнаружения движения. На сайте aforge.net есть обсуждение 2 разниц в рамки для обнаружения движения.


Это во многом зависит от формата изображения и сжатия. Но, в конце концов, вы, вероятно, берете два растра и сравниваете их пиксель за пикселем.

посмотри Perceptual Image Разница Утилита.


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


одно место для начала-богатая библиотека обработки изображений, такая как IM. Вы можете баловаться с его операторами в интерактивном режиме с помощью IMlab tool, вызовите его непосредственно с C или C++ или используйте его действительно приличную привязку Lua, чтобы выгнать его из Lua. Он поддерживает широкий спектр операций с растровыми картами, а также расширяемую библиотеку форматов файлов.

даже если вы намеренно ничего не перемещали, вы можете использовать такой алгоритм, как просеять чтобы получить хорошее выравнивание качества субпикселей между кадрами. Если только ты ... --9-->хочу для того чтобы обработать камеру как фиксированный и обнаружить движение кушетки также.


Я написал это бесплатное приложение .NET, используя инструментарий, который делает моя компания (DotImage). Он имеет очень простой алгоритм, но код с открытым исходным кодом, если вы хотите играть с ним-вы можете адаптировать алгоритм к классам изображений .NET, если вы не хотите покупать копию DotImage.

http://www.atalasoft.com/cs/blogs/31appsin31days/archive/2008/05/13/image-difference-utility.aspx


Это интересный вопрос. Я не могу сослаться на какие-либо конкретные библиотеки, но процесс, о котором вы спрашиваете, в основном является минимальным случаем компенсации движения. Это способ, которым MPEG (MP4, DIVX, whatever) video удается сжимать видео так очень хорошо; вы можете посмотреть в MPEG для получения некоторой информации о том, как эти алгоритмы компенсации движения реализованы.

еще одна вещь, которую нужно иметь в виду; сжатие JPEG-это сжатие на основе блоков; большая часть преимущество, которое MPEG приносит от вещей, - это фактически сделать сравнение блоков. Если большая часть вашего изображения (скажем, фон) одинакова от одного изображения к другому, эти блоки будут неизменными. Это быстрый способ уменьшить объем данных, необходимых для сравнения.


просто используйте классы .NET imaging, создайте новый bitmap () x 2 и посмотрите на значения R & G & B каждого пикселя, вы также можете посмотреть значения A (Альфа/прозрачность), если хотите, при определении разницы.

также Примечание, используя метод getPixel (y, x) может быть очень медленным, есть еще один способ получить все изображение (менее элегантный) и для каждого ing через него самостоятельно, если я помню, что он назывался getBitmap или что-то подобное, посмотрите в классах imaging / bitmap & прочитайте некоторые tutes они действительно все, что вам нужно и не так сложно использовать, не идти третьей стороной, если вы не должны.