Вот простой процесс:
- Назначьте измерения текстуры для каждой области на изображении.
- Используйте алгоритм маркировки области / подключения (или алгоритм увеличения области), чтобы объединить соседние области, имеющие одинаковую меру текстуры.
- Реализуйте простой алгоритм следования ребер, чтобы проследить контур каждой области.
Измерения текстуры Лоу - более старый, но все же полезный метод определения текстуры на изображении, и их может быть достаточно для того, чтобы вы могли отличить текстуру А от текстуры Б по всему изображению. См. Раздел «Энергетические меры текстуры законов» в статье Википедии:
http://en.wikipedia.org/wiki/Image_texture
В качестве первого шага рассчитайте все показатели текстуры и определите, какой именно показатель (например, край или пятно) позволяет вам легче отличить одну текстуру от другой. (Если вы опубликуете несколько фотографий, я могу помочь вам определить показатель текстуры.)
Если у вас есть только две текстуры, A и B, вы можете рассматривать их как передний план и фон, и будет работать стандартный алгоритм маркировки области. Чтобы было легче увидеть, что происходит при обработке, вы можете создать новое изображение, назначив тексели A (элементы текстуры, небольшие куски текстуры) белому цвету, а B тексели - черному цвету. Алгоритмы маркировки областей и / или следования контурам затем находят соединенные белые и черные области. Функция findContours () в OpenCV будет работать хорошо.
http://en.wikipedia.org/wiki/Connected-component_labeling
Та же статья в Википедии включает в себя как традиционный многопроходный алгоритм, так и однопроходный алгоритм. Я не реализовал однопроходный алгоритм, описанный там, но я работал с однопроходным алгоритмом, описанным в статье «Алгоритм маркировки компонентов с использованием метода контурной трассировки» Чена и Чанга. В статье Чена и Чанга также описан стандартный алгоритм следования контурам, который можно быстро реализовать.
Если у вас есть более двух текстур, вы можете использовать алгоритм водораздела или среднего смещения , чтобы объединить области вместе после того, как вы переставили текстуры в цвета. Хотя это переназначение от текстуры к цвету не является необходимым, оно облегчает процесс отладки и понимания.