Перейти к содержимому
Compvision.ru
hawk1

Классификация контуров

Recommended Posts

Есть снимок сетчатки глаза. Обрабатываю его по следующему алгоритму

1. Преобразую в полутоновое

2. Применяю медианный фильтр

3. Выполняю адаптивную бинаризацию.

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

16_left.jpg

1.bmp.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В таком виде тяжело будет классификацию провести.

Может перейти в пространство HSV, по набору красных оттенком классифицировать сосуды, по набору светло-серых оттенков и их форме классифицировать пятна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как насчет вот такого изображения? здесь четко видны сосуды и пятна.

1.bmp.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Инфракрасное?

Можно сделать инверсию, бинаризацию по порогу, затем морфологию (erode затем dilate), сосуды исчезнут.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что вы подразумеваете под бинаризацией по порогу? Адаптивную бинаризацию, бинаризацию Отсу или что то другое?

Пытался классифицировать вот так

            Img.FindContours(storage, out contour, CvContour.SizeOf, ContourRetrieval.List, ContourChain.ApproxNone, initPoint);
            while (contour != null)
            {
                double perimeter = contour.ArcLength();
                double area = Math.Abs(contour.ContourArea());
                double compact = area / (perimeter * perimeter);
                if (compact > 0.01 && compact < 0.087) 
                      dst.DrawContours(contour, new CvScalar(255, 0, 0), new CvScalar(255, 0, 0), -1, -1, LineType.Link8, new CvPoint(0, 0));
                else
                    if (perimeter / area > 0.5)                    
                        dst.DrawContours(contour, new CvScalar(0, 0, 255), new CvScalar(0, 0, 255), -1, -1, LineType.Link8, new CvPoint(0, 0));
                contour = contour.HNext;
            }

Но выделяет не все сосуды. Ниже градиентное изображение, к которому применяется алгоритм.

1.bmp.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Задачка сложная, аналогична этой: http://people.idsia.ch/~juergen/deeplearningwinsbraincontest.html

emstacks754x466.jpg

 

Можно попробовать те же подходы на основе глубоких сетей. 

С рекуррентными сетями я пока не особо разбирался, но мне думается TensorFlow самый близкий путь к цели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это не в ту степь. Детектор Виолы-Джонса (haarclassifier), используется преимущественно для обнаружения объектов с более-менее постоянной геометрией (например лица, транспорт, логотипы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 hour ago, Smorodov said:

С рекуррентными сетями я пока не особо разбирался, но мне думается TensorFlow самый близкий путь к цели.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

куча данных по теме, правда без разметки

https://www.kaggle.com/c/diabetic-retinopathy-detection

haartraining, он же adaboost можно прикрутить, беря пиксель и вокруг него патч-окрестность, но насколько это будет работать это вопрос.

 

Какое то есть готовое решение для этих задач на CNN?

 

Хотелось бы еще посмотреть на разметку, т.е. как это человек разметит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 10.12.2015 at 11:45 PM, Smorodov said:

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

Немного вне темы, но тексты более-менее вменяемые получились или нет? У меня после 150 эпох на другом произведении всё равно некрасивый текст получается, причём полностью рассогласованный по формам слов(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он же по буквам собирает, так там и слова-то не все существующие получались :) ,

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

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

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 18.12.2015 at 7:39 PM, Smorodov said:

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

Ещё 200 эпох прогнал, мне больше результат нравится, хотя всё равно бессмысленный и с ошибками. В математику пока не очень сильно вникал, поэтому пока вопрос новичка. char-rnn показывает два значения: train_loss и grad/param norm. Первый у меня со временем обучения меняется, но уже начал колебаться около 0.78, а вот второй с каждой сотней эпох снижается. До этого был 0.01, а теперь уже 0.003. Пожалуйста, можете "на пальцах" пояснить, что эти параметры значат?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тоже не вникал пока, но навскидку train_loss - значение минимизируемой функции, она задана так, что при ее минимизации прогноз сети улучшается, grad/param norm - похоже скорость обучения, ее часто меняют со временем (уменьшают).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

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

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×