Как сопоставить сходство текстур в изображениях?

Каковы способы количественной оценки текстуры части изображения? Я пытаюсь обнаружить области, похожие по текстуре в изображении, что-то вроде "насколько они близки?"

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

Обратите внимание, что это не зависит от соответствия шаблонов.

Wikipedia не дал подробных сведений о фактическом внедрении любого из анализов текстуры.

Ответ 1

Вы хотите найти две разные области изображения, которые выглядят одинаково (одинаковая текстура) или соответствуют текстуре в одном изображении другому? Второй сложнее из-за различной радиометрии.

Вот базовая схема измерения подобия областей.

  • Вы пишете функцию, которая в качестве входных данных получает область изображения и вычисляет скалярное значение. Как средняя яркость. Этот скаляр называется функцией
  • Вы пишете больше таких функций, чтобы получить около 8 - 30 функций. которые образуют вместе вектор, который кодирует информацию об области в изображении
  • Вычислите такой вектор в обе области, которые вы хотите сравнить.
  • Определите функцию подобия, которая принимает два вектора и выводит, насколько они похожи.

Вам нужно сосредоточиться на шагах 2 и 4.

Шаг 2: Используйте следующие функции: std() яркости, какой-то угловой детектор, энтропийный фильтр, гистограмма ориентации ребер, гистограмма частот FFT (направления x и y). Используйте информацию о цвете, если она доступна.

Шаг 4. Вы можете использовать простоту косинуса, минимальный или взвешенный косинус.

После того, как вы реализуете около 4-6 таких функций, а функция сходства начинает запускать тесты. Посмотрите на результаты и попытайтесь понять, почему и где они не работают. Затем добавьте конкретную функцию, чтобы охватить эту тему. Например, если вы видите, что текстура с большими блобами считается похожей на текстуру с крошечными блобами, тогда добавьте морфологический фильтр, рассчитанный на плотность объектов с размером > 20sq пикселей.

Итерировать процесс идентификации специфической функции проблемного дизайна примерно 5 раз, и вы начнете получать очень хорошие результаты.

Ответ 2

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

Thre - это документ, объясняющий подход волновода для описания текстуры. Существует также метод сравнения.

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

Ответ 3

Интересным подходом для этого является использование локальных двоичных паттернов. Вот базовый пример и некоторые пояснения: http://hanzratech.in/2015/05/30/local-binary-patterns.html

Смотрите этот метод как один из многих способов получения функций из ваших изображений. Это соответствует 2-му шагу метода DanielHsH.