Я пытаюсь «сопоставить» маленькие квадратные пятна на изображении. На первый взгляд кажется разумным просто провести евклидово сравнение стилей расстояний двух из этих массивов, чтобы получить меру «сходства». Во многих случаях это работает нормально («лучший» патч (минимальное значение) в соответствии с этим показателем очень похож на патч запроса). Однако во многих случаях это приводит к очень плохому совпадению. Например, возьмите эти две пары патчей:
Два пятна кирпичной стены, оценка 134 (это сумма компонентов средней абсолютной разности пикселей):
Один участок кирпичной стены, один участок травы, оценка 123!
Для человека «ясно» трава не соответствует кирпичу, но этот показатель говорит об обратном. Проблема только в локальной статистической вариации.
Если я использую что-то вроде сравнения гистограмм, я полностью теряю всю пространственную информацию - например, если патч с травой сверху и кирпичом снизу, он будет точно соответствовать патчу с травой снизу и кирпичом сверху (снова еще один "заведомо неправильный" матч).
Есть ли метрика, которая каким-то образом объединяет обе эти идеи в разумное значение, которое будет оцениваться как «похожее» для пары 1 выше, но также не будет схожим для моего примера патча и его вертикального зеркала?
Любые предложения приветствуются!
Ответы:
Основная идея заключается в следующем: в информации о цвете нет ничего плохого - ее просто недостаточно. Так что лучше всего объединить несколько наборов функций.
Вы можете попробовать несколько функций, чтобы устранить эту неоднозначность. Что касается набора функций, вы можете использовать следующее:
В качестве основного сравнения, я хотел бы сначала провести различие между чистым кирпичным пятном и чистым травяным пятном. Для этого цвет, безусловно, является наиболее потенциальным элементом.
Объединение функций, чтобы сделать более надежную классификацию
Я бы использовал доминирующий цвет (использует, но не единственный) или ключевой цвет и сформировал бы кластеры. Посмотрите, где лежат головки кластера;
Если заголовки кластера находятся в ожидаемых областях, класс обычно легко обнаружить, если они попадают в серую область, то класс принадлежит там. Если он попадает в серую область, требуется другая функция.
Таким же образом, вы можете независимо классифицировать, используя матрицу текстур, а затем объединить обе оценки, чтобы результаты имели смысл.
Работа с пространственными проблемами
В частности, когда вы понимаете, что в пластырях могут быть части, наполовину кирпичи и пол травы. Я думаю, что вам не нужно больше дополнительных функций или другой матрицы. Это может быть обработано двумя способами.
1. Держите патч для нескольких участников как разные классы. Например, кроме
birck-only
класса иgrass-only
класса, вы также можете иметьhalf-brick-half-grass-vertical
иhalf-brick-half-grass-horizontal
всего четыре класса. Это можно легко классифицировать с помощью метода кластеризации, который мы обсуждали ранее.2. Добавьте мультимасштабную классификацию. Например, если патч находится в серой области, вы можете разделить патч на две части, то есть слева и справа. Точно так же вы можете разделить верх и низ. Теперь вы можете применить идентичную классификацию для этой «половины». В идеале перечисленная выше функция должна позволить вам сделать ее масштабируемой, чтобы сравнивать сходство признаков между полной частью (например, доминирующий цвет может быть одинаковым независимо от размера), или вам может потребоваться изменить его размер.
Добавление большего количества классов (как в части 1) или нескольких уровней (как в части 2) будет простым; верхний предел будет обусловлен двумя факторами - либо любое дополнительное деление больше не будет добавлять никакой ценности к классификации, либо чрезмерный шум будет эффективно вносить неоднозначность в классификацию. Это где вы остановитесь.
источник
Для начала, двух изображений и трех измерений недостаточно, чтобы установить статистическую модель любого типа, которая в терминах может использоваться для определения оптимальной метрики сравнения.
Я думаю, вы могли бы начать смотреть на документы по распознаванию текстур для методов и подсказок. Это активное поле.
Что бы это ни стоило, я выполнил несколько тестов перцептивных хеш-функций (на основе DCT и случайной проекции) и провел небольшое испытание с так называемым дескриптором SIFT. Эти функции могут разделять расстояния между классами и между классами, хотя из 3-х изображений невозможно что-либо сделать.
Код на github .
источник