Властивості виявлення текстури та області на зображенні


9

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

Я думав використати перехресну кореляцію, яка дала б мені групу позицій шаблону (легенд) на зображенні, але чи є спосіб використовувати це для отримання піксельних значень меж (вони, як правило, нерегулярні)? Також, чи є ще якийсь кращий спосіб зробити це?

Справжнім світовим прикладом цього може бути виявлення регіонів опадів на карті, що показує три рівні опадів за рік. Кожному рівню присвоюється текстура, присутня в легенді, яка використовується для відповідності текстури на одному зображенні.


4
Було б корисно, якщо ви насправді поділилися прикладами та, можливо, деякими попередніми рішеннями, які ви спробували
Іво Фліпс

3
Виразно завантажте кілька прикладних зображень, щоб ми зрозуміли, що ви робите. Як деякі регіони наповнені суцільними, а інші - вилупленими? nps.gov/sagu/naturescience/images / ...
ендоліти

Якщо у вас є matlab, ви можете використовувати панель інструментів для обробки зображень. Якщо ні, то їхній веб-сайт все ще дає хороший огляд стандартних алгоритмів, які ви можете використовувати, наприклад, функцію bwconncomp .
Містер Білий

Відповіді:


1

Ось простий процес:

  1. Призначте текстурні вимірювання для кожної області зображення.
  2. Використовуйте алгоритм маркування / підключення регіону (або алгоритм зростаючого регіону), щоб приєднати сусідні регіони, що мають однаковий показник текстури.
  3. Реалізуйте простий алгоритм, що слід за краєм, щоб простежити контур кожної області.

Заходи щодо текстури Закону - це стара, але все ж корисна методика визначення текстури зображення, і вони можуть бути достатніми для того, щоб ви відрізнили текстуру А від текстури В на всьому зображенні. Дивіться розділ "Закони щодо вимірювання текстури енергії" у статті Вікіпедії:

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

На першому етапі обчисліть всі текстурні заходи та визначте, який конкретний захід (наприклад, Edge або Spot) дозволяє легко відрізнити одну текстуру від іншої. (Якщо ви опублікуєте кілька зображень, я можу допомогти вам визначити міру текстури.)

Якщо у вас є лише дві текстури, A і B, ви можете розглядати їх як передній план і фон, і працює стандартний алгоритм маркування регіону. Щоб легше було побачити, що відбувається в процесі обробки, ви можете створити нове зображення, призначивши A texels (елементи текстури, невеликі шматки текстури) до білого кольору, а B texels - до чорного кольору. Алгоритми маркування регіонів та / або алгоритми, що слідують за контуром, потім знайдуть пов'язані білі та чорні області. Функція findContours () у OpenCV буде добре працювати.

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

Ця ж стаття у Вікіпедії включає як традиційний багатопропускний алгоритм, так і однопрохідний алгоритм. Я не реалізував описаний там алгоритм з одним проходом, але я працював з алгоритмом однопрохідного опису, описаного в статті "Алгоритм маркування компонентів за допомогою технології контурного відстеження" Чен і Чанг. У статті Чен та Чанга також описаний стандартний алгоритм наступного контуру, який можна швидко реалізувати.

Якщо у вас більше двох текстур, ви можете використовувати алгоритм вододілу або середнього зсуву для кластеризації регіонів разом після перестановки текстур на кольори. Хоча це переоформлення від текстури до кольору не є необхідним, це полегшує процес налагодження та розуміння.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.