Я провел много исследований и нашел такие методы, как адаптивный порог, водораздел и т. Д., Которые можно использовать для обнаружения вен в листьях. Однако пороговое значение не очень хорошее, так как оно создает много шума
Все мои изображения - серые
РЕДАКТИРОВАТЬ: мое исходное изображение
После порога
Как следует из ответа, я попробовал следующее обнаружение края
- благоразумный
Слишком много шума и нежелательных помех
- Собела
- Робертс
РЕДАКТИРОВАТЬ: попробовал еще одну операцию, я получаю следующий результат лучше, чем то, что я пытался с хитрым и адаптивным Что вы чувствуете?
Ответы:
Вы не ищете края (= границы между расширенными областями с высоким и низким значением серого), вы ищете гребни (тонкие линии темнее или ярче, чем их окрестности), поэтому краевые фильтры могут быть не идеальными: краевой фильтр будет дать вам два фланга (по одному на каждой стороне линии) и низкий ответ в середине линии:
ДОБАВИТЬ : Если бы вас попросили объяснить разницу между детектором краев и детектором гребней более четко. Я заранее прошу прощения, если этот ответ становится очень длинным.
Детектор края (обычно) является первым производным оператором: если вы представляете входное изображение в виде трехмерного ландшафта, детектор края измеряет крутизну наклона в каждой точке этого ландшафта:
Если вы хотите определить границы протяженной светлой или темной области, это нормально. Но для вен на изображении ОП вы получите то же самое: контуры слева и справа от каждой вены:
Это также объясняет «двойную линию» в результатах детектора краев Canny:
Итак, как вы обнаруживаете эти тонкие линии (то есть гребни), тогда? Идея состоит в том, что значения пикселей можно (локально) аппроксимировать полиномом 2-го порядка, т.е. если функция изображения равна , то для малых значений и :g x y
или в матричной форме:
Производная матрица второго порядка называется " Гессенская матрица ". Он описывает структуру второго порядка, в которой мы заинтересованы.⎛⎝⎜∂2g∂x2∂2g∂x∂y∂2g∂x∂y∂2g∂y2⎞⎠⎟
Часть 2-го порядка этой функции может быть преобразована в сумму двух парабол, повернутых на некоторый угол, путем разложения указанной выше матрицы Гессе на времена вращения диагональной матрицы ее собственных значений ( Матричное разложение ). Нас не волнует вращение (мы хотим обнаружить гребни в любой ориентации), поэтому нас интересуют только иλ1x2+λ2y2 λ1 λ2
Какие формы могут иметь это приближение функции? На самом деле, не так много
Чтобы обнаружить гребни, мы хотим найти области на изображении, которые выглядят как последние из приведенных выше графиков, поэтому мы ищем области, в которых главное собственное значение гессиана велико (по сравнению с второстепенным собственным значением). Самый простой способ определить это - просто вычислить главное собственное значение для каждого пикселя - и это то, что делает приведенный ниже фильтр гребня.
Хребет фильтр , вероятно , даст лучшие результаты. Я попробовал встроенную в Mathematica
RidgeFilter
(которая вычисляет главное собственное значение матрицы Гессена для каждого пикселя) на вашем изображении:Как видите, для каждой тонкой темной линии есть только один пик. Бинаризация и скелетизация дают:
После обрезки скелета и удаления мелких компонентов (шума) с изображения я получаю этот последний скелет:
Полный код Mathematica:
ДОБАВЛЯТЬ:
Я не эксперт по Matlab, я не знаю, имеет ли он встроенный ридж-фильтр, но я могу показать вам, как реализовать его «вручную» (опять же, используя Matematica). Как я уже сказал, ребристый фильтр является основным собственным значением матрицы Гессе. Я могу вычислить это собственное значение в Mathematica символически:
=>12(Hxx+Hyy+H2xx+4H2xy−2HxxHyy+H2yy−−−−−−−−−−−−−−−−−−−−−−−√)
Итак, вам нужно вычислить вторые производные , , (используя sobel или производную гауссовского фильтра) и вставить их в выражении выше, и у вас есть свой фильтр гребня. H xy H yyHxx Hxy Hyy
источник
При использовании обнаружения края Канни (в Halcon), когда альфа равна 1, а нижний порог 8 и верхний порог 13 (по шкале 1-255), я получаю следующий результат:
С настройкой параметров, результат, который вы получили от Canny, может быть значительно улучшен. Используя это изображение, вы можете пропустить короткие края, чтобы удалить шум, и соединить длинные края для конечного результата.
Кстати: другой цвет указывает на другой край.
Я могу получить довольно похожий результат, используя этот онлайн детектор краев Canny :
источник
Следуя вышеприведенному отличному ответу, вот как это сделать на python, используя scikit funcitons.
источник
img
должно быть? У меня естьpng
файл, и он не работает.i1
это большее из собственных значений, поэтому вы должны использовать это.Вместо порога я применил простое обнаружение краев.
Используется GIMP с разницей от Гаусса - Radious Outer: 3.0 и Inner: 1.0.
Вот как это выглядит.
Вы можете дополнительно применить медианный фильтр или эрозию / расширение, чтобы вы могли удалить некоторые зернистые шумы.
Вот страница, которая объясняет реализацию GIMP.
Вы должны обратиться к различным методам, таким как лапласиан Гаусса или Разница Гауссина и т. Д. См .: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7
И этот ответ Как лапласиан используется для маски нерезкости?
источник
Эта тема всегда вызывала большой интерес, и в то же время по этой теме не существует реального консенсуса. Поэтому я решил оставить несколько слов.
В моих ответах на ранее заданные похожие вопросы о стековом обмене ( Q1 и Q2 ) использовался алгоритм выделения субпиксельной криволинейной структуры Стегера. Этот метод работал достаточно хорошо во многих случаях и, к счастью, включая этот. Поэтому я публикую выходное изображение здесь: и здесь с другой настройкой параметров и без окраски подключений: подробности и правильные ссылки см. В сообщениях stackexchange, на которые я ссылался.
источник
В рамках моего последнего года инженерных исследований мне пришлось изучать методы сегментации кровеносных сосудов на изображениях глазного дна. Я нашел этот метод восстановления деревьев (Коэн, Лоран Д. и Милль, Жюльен особенно интересным для использования вместе с Методами быстрого марширования).
Другие документы, которые вы можете посмотреть:
Полезные ссылки: - Распространение фронта в 2D и 3D
Я надеюсь, что это немного помогает, хотя это не совсем современный уровень.
источник