26

Я пытаюсь подсчитать количество волос, трансплантированных на следующем изображении. Так что практически, я должен подсчитать количество пятен, которые я могу найти в центре изображения. (Я загрузил перевернутое изображение изображение лысой кожи головы, на которой были пересажены новые волосы, потому что исходное изображение является кровавым и абсолютно отвратительным! Чтобы увидеть оригинальное изображение без инвертирования, нажмите here. Чтобы увидеть большую версию перевернутое изображение просто нажмите на него). Есть ли какой-нибудь известный алгоритм обработки изображений для обнаружения этих пятен? Я узнал, что алгоритм Circle Hough Transform можно использовать для поиска окружностей в изображении, я не уверен, что это лучший алгоритм, который можно применить для поиска небольших пятен на следующем изображении.Как подсчитать количество пятен на этом изображении?

enter image description here

P.S. Согласно одному из ответов, я попытался извлечь пятна с помощью ImageJ, но результат не был достаточно удовлетворительным:

  1. Я открыл original неинвертированных изображений (Предупреждения это кровавое и противно видеть! !).
  2. Разделить каналы (Изображение> Цвет> Разделить каналы). И выбрали синий канал для продолжения.
  3. Прикладная Closing фильтр (Плагины> Быстрое Морфология> Морфологические фильтры) с этими значениями: Операция: закрытие, элемент: Площадь, Радиус: 2рх
  4. Прикладная White Top Hat фильтр (Плагины> Быстрое Морфология> Морфологические фильтры) с этими значениями: Операция : Белый Top Hat, Element: Square, Radius: 17px enter image description here

Однако я не знаю, что делать именно после этого шага для подсчета пересаженных пятна как можно более точно. Я пытался использовать (Process> Find Maxima), но результат не кажется достаточно точным для меня (с этими настройками: допуск шума: 10, Выходные: Единых точек, за исключением пограничного Maxima, светлый фон):

enter image description here

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

Какой набор фильтров вы рекомендуете точно находить пятна? Использование ImageJ кажется хорошим вариантом, поскольку он предоставляет большинство фильтров, которые нам нужны. Не стесняйтесь, однако, советовать, что делать, используя другие инструменты, библиотеки (например, OpenCV) и т. Д. Любая помощь была бы высоко оценена!

+0

Вместо реализации его по своему усмотрению, может попытаться использовать Emgu CV библиотеки (OpenCV в .net). Я использовал его немного в прошлом, но, к сожалению, не столько, чтобы помочь больше. http://www.emgu.com/wiki/index.php/Main_Page –

ответ

2

Вы можете сделать следующее:

  1. Threshold изображения, используя резюме :: порог
  2. Найти связные компоненты, используя резюме :: findcontour
  3. Отклонить связные компоненты размера больше определенного размера, как вы, кажется, обеспокоены только небольшими круговыми областями.
  4. Подсчитайте все действительные подключенные компоненты.
  5. Надеюсь, у вас есть спускное приближение фактического количества пятен.
  6. Чтобы быть статистически точнее, вы можете повторить 1-4 для диапазона пороговых значений и принять среднее значение.
+1

Спасибо, я попробую. Вы сами это испытали? Любой пример кода? – Meysam

5

Я только проверил это решение с помощью ImageJ, и это дало хороший предварительный результат:

  1. На исходном изображении, для каждого канала
  2. Малый (радиус 1 или 2) закрытия в порядке (черная часть в середине белого)
  3. Белая верхняя часть с радиусом 5, чтобы обнаружить белую часть вокруг каждого черного волоса.
  4. Маленькое закрытие/открытие, чтобы немного почистить изображение (вы также можете использовать срединный фильтр)
  5. Ultimate erode, чтобы подсчитать количество оставшегося белого блоба. Вы также можете использовать LoG (лапласиан гауссова) или карту расстояния.

[EDIT] Вы не распознали все белые пятна с помощью функции максимумов, так как после закрытия, некоторые зоны являются плоскими, так что максимумы не точка, а зона. В этот момент я думаю, что окончательное открытие или окончательное разрушение даст вам центр или каждое белое пятно. Но я не уверен, что есть функция/pluggin, которая делает это в ImageJ. Вы можете взглянуть на Mamba или SMIL.

H-maxima (после белой шляпы) также может немного почистить ваши результаты и улучшить контраст между белыми пятнами.

+0

Не могли бы вы предоставить ссылку на соответствующую функцию ImageJ, которую вы использовали на каждом этапе? Можно ли поделиться своим примером кода? – Meysam

+0

Я использовал фильтр плагинов «Быстрая морфология» в ImageJ. Затем вы просто называете имя методов, как я указал, с заданным параметром (только 1 радиус). – FiReTiTi

+0

У вас, безусловно, есть те же функции в OpenCV – FiReTiTi

29

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

Ниже у меня есть изображение с изображением слева и обнаружены пересадки справа. Зеленый цвет используется для выделения областей с более чем одной трансплантацией.

enter image description here

Общий подход очень простой (опишу позже), но все же он обеспечивает близко, чтобы быть точные результаты. Обратите внимание, что это была первая попытка, поэтому есть много возможностей для усовершенствований.

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

  1. качества вашего изображения ужасно
  2. вы говорите, что вы хотите, чтобы найти места, но на самом деле вы ищете для пересадки волоса objects
  3. вы полностью игнорируете средний голову факта, далеко не плоский
  4. это выглядит, как вы думаете, фильтры добавить некоторые важные детали вашего исходного изображения
  5. вы ожидаете алгоритмы сделать магию для вас

Давайте рассмотрим все эти пункты по одному.

1.Качество изображения

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

enter image description here

Я держал пари, что это трудно для вас, чтобы «читать» эти зерновые культуры, несмотря на то, у вас есть самые современные алгоритмы распознавания объектов в вашем мозгу.

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

2. Лучшее понимание объектов, которые будут определены

Вообще говоря, у вас есть 3D-объекты, которые будут определены. Таким образом, вы можете анализировать тени, чтобы повысить точность. Кстати, это почти как анализ на поверхности Марса :)

enter image description here

3. Форма головы не следует игнорировать

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

enter image description here

3D model source

4. Фильтры не могут помочь

Фильтры не добавлять информацию, но они могут легко удалить некоторые важные детали. Вы упомянули преобразование Хафа, поэтому интересный вопрос: Find lines in shape

В качестве примера я воспользуюсь этим вопросом. В принципе, вам нужно извлечь геометрию из заданного изображения. Строки в форме выглядит немного сложным, так что вы можете решить использовать skeletonization

enter image description here

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

5. К сожалению, никакой магии здесь

Пожалуйста знать следующее:

enter image description here

Вы должны попытаться получить более точные данные для того, чтобы добиться более высокой точности и стабильности. Сама модель также очень важна.

Результаты объяснены

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

enter image description here

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

В любом случае, лучшее качество изображения позволит вам использовать даже простой метод и получить правильные результаты.

Наконец

Как клинике удалось получить Yondu как клиента? :)

enter image description here

Update (инструменты и методы)

  • Постеризация - GIMP (настройки по умолчанию, мин цветов)
  • идентификации Пересадка и визуализации - программа Java, нет библиотеки или других зависимые
  • Имея идентифицированные районы, можно легко найти средний размер, затем сравнить с другими областями и отметить значительно большие площади в виде нескольких трансплантаты.

В принципе, все делается «вручную». Горизонтальное и вертикальное сканирование, пересечения дают области. Вертикальные линии сортируются и используются для восстановления реальной формы. Решение является доморощенным, код немного уродлив, поэтому не хочу делиться им, извините.

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

enter image description here

+0

Привет, я очень ценю усилия, которые вы приложили к подготовке такого замечательного друга! Не могли бы вы рассказать о том, какое программное обеспечение/библиотеку вы использовали для вставки изображения? Если вы закодировали, не могли бы вы также указать пример кода? Если вы использовали программное обеспечение, какие настройки вы применили? Как вы определили области с несколькими трансплантатами? И, наконец, что вы использовали для рисования этих линий вокруг каждой идентифицированной области? – Meysam

+0

Здравствуйте @Meysam. NP, интересная задача. См. Обновленный. Код действительно прост, int [] [] представляет и изображение и т. Д., Нечего делиться. Пожалуйста, не пропустите основную точку моего ответа - с правильными данными вы найдете несколько способов решения вашей проблемы. Я действительно выполнял базовое сканирование только для удовольствия, и он показывает неплохие результаты, когда входные данные в порядке. –

+0

Спасибо, ваше решение является хорошей отправной точкой для работы. Позвольте мне посмотреть, смогу ли я его улучшить :) Я буду держать вас в курсе. – Meysam

3

AS Ренат упомянул, Вы не должны ожидать, алгоритмы, чтобы сделать магию для вас, но я надеюсь, придумать разумную оценку числа пятна. Здесь я дам вам несколько советов и ресурсов, проверьте их и перезвоните, если вам нужна дополнительная информация.

Во-первых, я очень надеюсь на морфологические операции, но я думаю, что идеальный шаг предварительной обработки может сильно повысить точность, получаемую ими. Я хочу, чтобы вы положили палец на этап предварительной обработки. Таким образом, я буду ти работы с этим изображением: enter image description here

Это идея:

собирать и концентрировать массу вокруг мест пятна. Что я имею в виду, когда я концентрирую массы? Давайте откроем книгу с другой стороны: как вы видите, предоставленное изображение содержит некоторые основные пятна, окруженные некоторыми n oisy серыми точками уровня.Точками я имею в виду пиксели, которые не являются частью пятна, но их серое значение больше нуля (чистый черный) - которые доступны вокруг пятен. Понятно, что если вы очистите эти шумные точки, вы наверняка придумаете хорошую оценку пятен, используя другие инструменты обработки, такие как морфологические операции.

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

Как сделать концентрирующую вещь? Ну, идея, которую я только что объяснил, доступна в бумаге this, которой, к счастью, доступен ее код. См. Раздел 2.2. Основная идея состоит в том, чтобы использовать случайный ходок, чтобы ходить по изображению навсегда. Формулировки формулируются таким образом, что ходунки будут посещать заметные места гораздо чаще, и это может привести к выявлению заметных мест. Алгоритм моделируется цепью Маркова и равновесное время удара эргодической цепи Маркова содержит ключ для определения наиболее ярких пятен.

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

Очень приятно думать о таких интересных проблемах. Надеюсь, это поможет.

+0

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

+0

Вот ссылка на код. Обратите внимание, что вы используете часть кода, которая связана с массовой концентрацией. Верните мне результаты. http://www.vision.caltech.edu/~harel/share/gbvs.php – Saeed

+0

Здравствуйте, снова! Я не знаю, использовал ли я правильную функцию (gbvs), но полученная карта полезности выглядит следующим образом: http://i.stack.imgur.com/0tVBA.jpg Знаете ли вы, что я сделал неправильно ? – Meysam

2

Это то, что вы получаете после применения радиуса unsharpen 22, количество 5, пороговое значение 2 к вашему изображению.

Этот увеличивает контраст между точками и окрестностями. Я использовал предположение шара, что точки находятся где-то между 18 и 25 пикселями в диаметре.

Теперь вы можете взять локальные максимумы белого цвета как «точка» и заполнить его с черным кругом, пока круговая окрестность точки (круг радиуса 10-12) не стирается. Это должно позволить вам «отбирать» точки, соединенные друг с другом в кластерах более 2. Затем снова найдите локальные максимумы. Промыть и повторить.

Фактические «точечные» области резко контрастируют с окружающими районами, поэтому это позволит вам отбирать их так же хорошо, как и вы, наблюдая за ним.

Unsharpen radius 22, amount 5, threshold 2.

Смежные вопросы