Два изображения похожи - Измерение - PullRequest
2 голосов
/ 14 декабря 2011

Я должен решить, являются ли два изображения (одно изображение шаблона, одно искаженное изображение) почти одинаковыми.Изображения могут иметь некоторые различия в яркости, некоторые отметки на нем или разные цифры.Также может быть, что деформированное изображение смещено на 1 или 2 пикселя.(Смотрите мои примеры изображений!)

Как я могу решить эту проблему?Я использую OpenCV / C ++.

Ответы [ 4 ]

5 голосов
/ 15 декабря 2011

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

1.Найдите черные метки в углу

Я не знаю, сколько у вас фона при регистрации изображений, но это, вероятно, должно работать с очень легкой версией.Ищите каждую черную метку отдельно.Сначала вы слегка сглаживаете свое изображение (может быть, гауссово с r = 1), чтобы подавить шум, а затем вы бинаризуете свое изображение с очень низким порогом, чтобы убить почти каждую «не черную» часть.На таком хорошем изображении это выглядит так:

enter image description here

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

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

2.Поиск чисел

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

Например, см. Нижний правый номер: этовсегда непосредственно между нижними отметками, с правой стороны в диапазоне, скажем, от 1/4 длины между нижними отметками до почти правой отметки.Вы должны измерить этот регион лучше, но, учитывая ваши позиции меток, вы можете выразить эту область в зависимости от черных меток.

3.Сравнение числовых областей (распознавание символов)

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

Поскольку вы можете извлечь область с помощью номера довольно хорошо, почему бы не использовать какой-либо базовый OCR и сравнивать не изображение чисел, а само число?

1 голос
/ 14 декабря 2011

Если вы можете, я заблаговременно выберу несколько опорных точек и найду их местоположение и относительное положение. Убедитесь, что есть правильный номер и их расположение «достаточно близко». Примерами проверочных точек из этих примеров являются «красный треугольник в верхнем левом углу», текстовые заголовки и т. Д. *

0 голосов
/ 20 декабря 2011

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

Как отметил Халирутан, у вас уже есть некоторые метки.Нормализованная взаимная корреляция должна легко идентифицировать эти темные квадраты.Они определяют четыре точки сравнения для грубейшего аффинного преобразования.http://en.wikipedia.org/wiki/Affine_transformation

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

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

  1. Работать только в одной цветовой плоскости (например, красный от RGB)
  2. Найти локальный порог (например, скользящее среднее) для бинаризации цветовой плоскости.Локальный или адаптивный пороговый метод должен устранять различную интенсивность фона.Учитывая ваше примерное изображение, глобальный порог, вероятно, не лучший выбор.
  3. (Может быть) выполнить морфинговую операцию закрытия, чтобы упростить фигуры.
  4. Использовать сетку для определения относительной плотности пикселей.(Это что-то вроде нормализованной взаимной корреляции, но разбивает область на квадраты сетки.)
  5. (ИЛИ) Используйте простые меры текстуры изображения, такие как Laws Texture Measureures, для сравнения.

http://en.wikipedia.org/wiki/Image_texture#Laws_Texture_Energy_Measures

0 голосов
/ 19 декабря 2011

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

...