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

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

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

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

Википедия не дала много подробностей о фактической реализации какого-либо текстурного анализа.

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам