Обнаружить рисунок вены в листьях? - PullRequest
6 голосов
/ 08 марта 2012

Моя цель состоит в том, чтобы обнаружить рисунок вены в листьях, которые характеризуют различные виды растений

Я уже сделал следующее:

Исходное изображение:

enter image description here

После адаптивного определения порога:

enter image description here

Однако вены не так чисты и искажены, есть ли способ получить лучший результат

EDIT:

Я пытался установить цветовой порог. Мои результаты все еще неудовлетворительные. Я получаю следующее изображение

enter image description here

Пожалуйста, помогите

Ответы [ 3 ]

5 голосов
/ 09 марта 2012

Тот факт, что его изображение в формате JPEG будет давать "блочные" артефакты, что в приведенном вами примере приводит к тому, что большинство квадратных областей вокруг вен имеют много шума, поэтому в идеале нужно работать с изображением, которое не было потеряносжатия.Если это невозможно, попробуйте отфильтровать изображение, чтобы удалить некоторые шумы.

Вены, которые вы хотите извлечь, имеют цвет, отличный от фона, листа и тени, поэтому пороговое значение на основе цвета может бытьотличная идея.Недавно был задан вопрос с кодом, который может помочь здесь .После этого какая-то адаптивная нормализация поможет увеличить контрастность до того, как вы ее порогите.

[править]
Возможно, пороговое значение не является промежуточным шагом, который вы хотите сделать.Я сделал следующее, отфильтровав для удаления артефактов jpeg, выполнив некоторую математику канала CMYK (больше голубого и черного), а затем применив адаптивное выравнивание.Я почти уверен, что вы могли бы затем производить (субпиксельные) граничные точки, используя градиенты изображения и подавление не максимума, и, возможно, использовать яркость в каждой точке и свойства структуры вены (в основном, соединяющейся по касательной), чтобысоедините точки в линии.

Example of processed leaf image

4 голосов
/ 17 марта 2012

В прошлом я хорошо знаком с алгоритмом обнаружения краев разница гауссовских . Который в основном работает так: Вы размываете изображение дважды с помощью алгоритма размытия по Гауссу , но с разными радиусами размытия. Затем вы рассчитываете разницу между обоими изображениями.

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

Так что в основном это полосовой фильтр. Если выбранные радиусы слишком малы, создайте 2 «параллельные» линии. Но так как вены листьев маленькие по сравнению с протяженностью изображения, вы в основном находите радиусы, в которых вена образует 1 линию.

Здесь я добавил обработанную картинку. Шаги, которые я сделал на этой картинке:

  1. обесцвеченный (в оттенках серого)
  2. Разница по Гауссу. Здесь я размыл первое изображение с радиусом 10 пикселей, а второе изображение с радиусом 2 пикселя. Результат вы можете увидеть ниже.

Это только быстро созданный результат. Я предполагаю, что, оптимизируя параметры, вы можете даже получить лучшие. enter image description here

1 голос
/ 17 марта 2012

Это звучит как то, что я делал в колледже с нейронными сетями. Нейронные сети немного сложны, поэтому я не пойду туда. В любом случае, шаблоны являются идеальными кандидатами для двумерного преобразования Фурье! Вот возможная схема:

  1. У вас есть тренировочные данные и входные данные
  2. Ваши данные представлены в виде двумерного преобразования Фурье
  3. Если ваша база данных велика, вы должны запустить PCA для результатов преобразования, чтобы преобразовать 2D-спектрограмму в 1D-спектрограмму
  4. Сравните расстояние Хемминга, протестировав спектр (после PCA) 1 изображения со всеми изображениями в вашем наборе данных.

При таких примитивных методах вы должны ожидать ~ 70% распознавания, если изображения имеют примерно одинаковое вращение. Если изображения не имеют одинакового поворота. Возможно, вам придется использовать SIFT. Чтобы получить лучшее признание, вам понадобятся более интеллектуальные тренировочные наборы, такие как скрытая марковская модель или нейронная сеть. Правда в том, чтобы получить хорошие результаты для такого рода проблем, может быть достаточно много работы.

Выезд: https://theiszm.wordpress.com/2010/07/20/7-properties-of-the-2d-fourier-transform/

...