hawk1 0 Жалоба Опубликовано December 8, 2015 Есть снимок сетчатки глаза. Обрабатываю его по следующему алгоритму 1. Преобразую в полутоновое 2. Применяю медианный фильтр 3. Выполняю адаптивную бинаризацию. В результате получаю контурное изображение. Теперь надо классифицировать контуры на сосуды и пятна и промаркировать их разным цветом. Как это лучше сделать? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано December 8, 2015 В таком виде тяжело будет классификацию провести. Может перейти в пространство HSV, по набору красных оттенком классифицировать сосуды, по набору светло-серых оттенков и их форме классифицировать пятна. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hawk1 0 Жалоба Опубликовано December 10, 2015 А как насчет вот такого изображения? здесь четко видны сосуды и пятна. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 10, 2015 Инфракрасное? Можно сделать инверсию, бинаризацию по порогу, затем морфологию (erode затем dilate), сосуды исчезнут. Вытащить пятна, запомнить и залить черным на исходном изображении, вытянуть сосуды. Вообще, мне кажется, тут хорошо было бы предварительно, перед бинаризацией, применить применить фильтры (анизотропный, или габора (как для отпечатков пальцев делают)). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hawk1 0 Жалоба Опубликовано December 10, 2015 Что вы подразумеваете под бинаризацией по порогу? Адаптивную бинаризацию, бинаризацию Отсу или что то другое? Пытался классифицировать вот так 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; } Но выделяет не все сосуды. Ниже градиентное изображение, к которому применяется алгоритм. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 10, 2015 Задачка сложная, аналогична этой: http://people.idsia.ch/~juergen/deeplearningwinsbraincontest.html Можно попробовать те же подходы на основе глубоких сетей. С рекуррентными сетями я пока не особо разбирался, но мне думается TensorFlow самый близкий путь к цели. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hawk1 0 Жалоба Опубликовано December 10, 2015 а haartraining? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 10, 2015 Это не в ту степь. Детектор Виолы-Джонса (haarclassifier), используется преимущественно для обнаружения объектов с более-менее постоянной геометрией (например лица, транспорт, логотипы). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано December 10, 2015 1 hour ago, Smorodov said: С рекуррентными сетями я пока не особо разбирался, но мне думается TensorFlow самый близкий путь к цели. А разве для RNN уже появились вменяемые алгоритмы обучения, которые на реальных данных могут сойтись? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 10, 2015 Ну примерчик который прочитав "Войну и мир" (в оригинале ему скармливают сборник Шекспира) превращается в забавный бредогенератор я запускал, работает, но на большее меня пока не хватило. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано December 14, 2015 куча данных по теме, правда без разметки https://www.kaggle.com/c/diabetic-retinopathy-detection haartraining, он же adaboost можно прикрутить, беря пиксель и вокруг него патч-окрестность, но насколько это будет работать это вопрос. Какое то есть готовое решение для этих задач на CNN? Хотелось бы еще посмотреть на разметку, т.е. как это человек разметит. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
boriso 3 Жалоба Опубликовано December 18, 2015 On 10.12.2015 at 11:45 PM, Smorodov said: Ну примерчик который прочитав "Войну и мир" (в оригинале ему скармливают сборник Шекспира) превращается в забавный бредогенератор я запускал, работает, но на большее меня пока не хватило. Немного вне темы, но тексты более-менее вменяемые получились или нет? У меня после 150 эпох на другом произведении всё равно некрасивый текст получается, причём полностью рассогласованный по формам слов( Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 18, 2015 Он же по буквам собирает, так там и слова-то не все существующие получались , но предложения иногда составлялись, бессмысленные конечно, но вполне по правилам языка. Русский все же сложный язык, аглийский много проще. Перед скармливанием текста его желательно подготовить, убрать лишние пробелы, плюс я также переводил все в нижний регистр, убирал пунктуацию (чтобы проще было). 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
boriso 3 Жалоба Опубликовано December 21, 2015 On 18.12.2015 at 7:39 PM, Smorodov said: но предложения иногда составлялись, бессмысленные конечно, но вполне по правилам языка. Ещё 200 эпох прогнал, мне больше результат нравится, хотя всё равно бессмысленный и с ошибками. В математику пока не очень сильно вникал, поэтому пока вопрос новичка. char-rnn показывает два значения: train_loss и grad/param norm. Первый у меня со временем обучения меняется, но уже начал колебаться около 0.78, а вот второй с каждой сотней эпох снижается. До этого был 0.01, а теперь уже 0.003. Пожалуйста, можете "на пальцах" пояснить, что эти параметры значат? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 21, 2015 Я тоже не вникал пока, но навскидку train_loss - значение минимизируемой функции, она задана так, что при ее минимизации прогноз сети улучшается, grad/param norm - похоже скорость обучения, ее часто меняют со временем (уменьшают). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах