Подтвердить что ты не робот

Как подсчитать количество пятен на этом изображении?

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

введите описание изображения здесь

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

  • Я открыл оригинал без инвертированного изображения ( Предупреждение! Это чертовски и отвратительно видеть!).
  • Разделение каналов (Изображение > Цвет > Разделение каналов). И выберите синий канал для продолжения.
  • Прикладной фильтр Closing (плагины > Быстрая морфология > Морфологические фильтры) с этими значениями: Операция: Закрытие, Элемент: Квадрат, Радиус: 2px
  • Примененный фильтр White Top Hat (плагины > Быстрая морфология > Морфологические фильтры) с этими значениями: Операция: Белая верхняя шляпа, Элемент: Квадрат, Радиус: 17 пикселей введите описание изображения здесь

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

введите описание изображения здесь

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

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

4b9b3361

Ответ 1

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

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

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 модель источника

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

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

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

enter image description here

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

5. Извините, никакой магии здесь

Пожалуйста, имейте в виду следующее:

enter image description here

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

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

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

enter image description here

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

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

в заключение

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

enter image description here

Обновление (инструменты и методы)

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

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

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

enter image description here

Еще одно обновление

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

enter image description here

enter image description here

Дополнительные примеры можно найти на YouTube: RobotsCanSee

или следите за прогрессом в Telegram: RobotsCanSee

Ответ 2

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

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

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

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

Ответ 3

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

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

Enter image description here

Это идея:

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

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

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

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

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

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

Ответ 4

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

  • Порог изображения с использованием cv:: threshold
  • Поиск подключенных компонентов с помощью cv:: findcontour
  • Отклонить подключенные компоненты размером более определенного размера, поскольку вы, похоже, обеспокоены только небольшими круговыми областями.
  • Подсчитайте все допустимые подключенные компоненты.
  • Надеемся, у вас есть спускная аппроксимация фактического количества пятен.
  • Чтобы быть статистически более точным, вы можете повторить 1-4 для диапазона пороговых значений и принять среднее значение.

Ответ 5

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

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

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

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

Радиус Unsharpen 22, количество 5, порог 2.