Обнаружение текстуры и свойства области на изображении

9

У меня есть интересная проблема, которую я пытаюсь решить. Так, например, если у нас есть черно-белое изображение, содержащее две текстуры (A и B), мне интересно знать значения пикселей границ, которые бы полностью покрывали отдельные текстуры.

Я думал об использовании взаимной корреляции, которая дала бы мне кластер положений, шаблона (легенд) на изображении, но есть ли способ использовать это для получения значений пикселей границ (как правило, они нерегулярны)? Кроме того, есть ли другой лучший способ сделать это?

Реальным примером этого может служить обнаружение областей осадков на карте, показывающей три уровня осадков в год. Каждому уровню присваивается текстура, присутствующая в легенде, которая используется для сопоставления текстуры на том же изображении.

Лорем Ипсум
источник
4
Было бы полезно, если бы вы на самом деле поделились примерами и, возможно, некоторыми предварительными решениями, которые вы пробовали
Ivo Flipse
3
Обязательно загрузите несколько примеров изображений, чтобы мы поняли, что вы делаете. Как одни регионы заполнены сплошными, а другие заштрихованы? nps.gov/sagu/naturescience/images/...
эндолиты
Если у вас есть Matlab, вы можете использовать панель инструментов обработки изображений. Если нет, то их веб-сайт по-прежнему дает хороший обзор стандартных алгоритмов, которые вы, возможно, захотите использовать, например, функцию bwconncomp .
г-н Уайт

Ответы:

1

Вот простой процесс:

  1. Назначьте измерения текстуры для каждой области на изображении.
  2. Используйте алгоритм маркировки области / подключения (или алгоритм увеличения области), чтобы объединить соседние области, имеющие одинаковую меру текстуры.
  3. Реализуйте простой алгоритм следования ребер, чтобы проследить контур каждой области.

Измерения текстуры Лоу - более старый, но все же полезный метод определения текстуры на изображении, и их может быть достаточно для того, чтобы вы могли отличить текстуру А от текстуры Б по всему изображению. См. Раздел «Энергетические меры текстуры законов» в статье Википедии:

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

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

Если у вас есть только две текстуры, A и B, вы можете рассматривать их как передний план и фон, и будет работать стандартный алгоритм маркировки области. Чтобы было легче увидеть, что происходит при обработке, вы можете создать новое изображение, назначив тексели A (элементы текстуры, небольшие куски текстуры) белому цвету, а B тексели - черному цвету. Алгоритмы маркировки областей и / или следования контурам затем находят соединенные белые и черные области. Функция findContours () в OpenCV будет работать хорошо.

http://en.wikipedia.org/wiki/Connected-component_labeling

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

Если у вас есть более двух текстур, вы можете использовать алгоритм водораздела или среднего смещения , чтобы объединить области вместе после того, как вы переставили текстуры в цвета. Хотя это переназначение от текстуры к цвету не является необходимым, оно облегчает процесс отладки и понимания.

Rethunk
источник