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

2expres

Пользователи
  • Количество публикаций

    62
  • Зарегистрирован

  • Посещение

  • Days Won

    3

Все публикации пользователя 2expres

  1. Привет! Хочу поделится с Вами результатами своей работы по сегментации изображений. Исходные фотографии взяты из статей, стереоизображения произвольные из интернета. За 9 месяцев в графическом редакторе Лубок проведены следующие изменения: 1) Преобразование к палитре цветов. Количество цветов от 2 до 32. Преобразования веду методом медианного среза, преобразую изображение к 256 цветам, затем методом кластеризации 256 цветов привожу к заданному количеству цветов. Подобные преобразования есть в графическом редакторе GIMP и Color quantizer . Gimp выполняет преобразование изображения 24 МП в среднем более 1 минуты, но качество преобразования мне не нравится. Изображение приводится к серым цветам. Более качественное преобразование за счет большого количества ручных настроек выполняет Color quantizer , но время выполнения превышает 15 минут. Наше преобразование по качеству находится между GIMP и Color quantizer и выполняется 0,4 секунды. 2) На основе палитры цветов выполнена сегментация, которую я назвал сегментация медианного среза вначале выполняется преобразование к палитре цветов, а затем сегментация изображения. 3) После сегментации изображения получаю очень большое количество мелких сегментов (на 24 МП фотографии до 2 миллионов сегментов). В Каждом мелком сегменте находятся ближайшие соседи и работает алгоритм присоединения мелких сегментов к более крупным. В программе задается минимальная площадь сегмента от 1 до 500 пикселей. Это позволяет резко сократить количество сегментов. Время сегментации и сокращения количества сегментов для 24 МП фотографии всего менее 3 сек!!! 4) Доработана программа векторизации растровых изображений. В начале мы получаем векторный файл методом "хромого" жука (более подробно об этом методе я напишу статью на хабре), в котором углы между векторами кратны 90 градусов. Описание такого файла получается большим. Для сокращения векторного описания необходимо применять аппроксимацию полученного контура. Аппроксимацию я выполняю ломанной линией. Для дизайнерских работ аппроксимацию необходимо выполнять кривыми Безье, тогда векторное изображение выглядит более эстетично. Но для компьютерного зрения ломанная линия более предпочтительна, потому что проще производить распознавание объектов. После аппроксимации я формирую файл *.svg, который можно просмотреть любым браузером или векторным редактором. 5) Если производить аппроксимацию в чистом виде, каждого сегмента, то между границами сегментов появляются разрывы, особенно при грубой сегментации. Т.к. сегменты аппроксимируются по разному в зависимости от начала сегмента. В моей программе выполняется стыковка границ сегментов, если этот сегмент уже аппроксимирован, то следующий сегмент берет в качестве описания границу ранее описанного сегмента. Этот метод работает, только для 4-х связной сегментации медианного среза. 6) Обработка больших файлов до 8000 х 8000 пикселей. Для обработки больших файлов очень хорошее предложение дал smorodov, делать обработку не каждого пикселя, а через пиксель и строку. В этом случае время выполнения можно сократить в 4 раза. Но мы этого пока не сделали. Пример 1: Результат в векторе: 8.svg Сегментация ректифицированных стереоизображений: исходное изображение сегментация 2 цвета. Минимальный размер сегмента 50 сегментация 4 цвета. Минимальный размер сегмента 50 сегментация 8 цветов. Минимальный размер сегмента 50 сегментация 32 цвета. Минимальный размер сегмента 50 Полученные результаты позволяют получать привязки к сегментам, узнать расстояние до объектов. Время обработки до 65 мс (это одним ядром)- это позволяет производить обработку в реальном масштабе времени 30 кадров в секунду. Пример, из статьи https://habrahabr.ru/company/intel/blog/266347/ : исходное изображение Изображение после сегментации алгоритмом WaterShed полученное в статье результат полученный в графическом редакторе Лубок. 4-х связная сегментация (6 цветов, мин размер сегмента 500) В полученном мной результате монеты отделены от фона, многие монеты разделены друг от друга.
  2. Детектор кругов

    Результат получили выполнив 2 сегментации: вначале легкую 8-ми связную сегментацию для выравнивания освещенности, затем глубокую сегментацию медианного среза используя разделение по 2 цветам. Программы и алгоритмы полностью наши. Можете сами поиграться с нашей сегментацией http://esm.ho.ua/Automat.html внизу графический редактор Лубок и как им пользоваться для сегментации изображений.
  3. Детектор кругов

    Немного занимался похожей тематикой: визуальный контроль при производстве печатных плат, если интересно http://esm.ho.ua/Visual.html Я пришел к выводу, что для получения качественных результатов необходимо: качественная съемка с высоким разрешением и уделить особое внимание освещению печатной платы. Оно должно быть равномерным, без бликов и затемнений. Как вариант использование бестеневых ламп. В исходной фотографии, что по ссылке нет хорошего освещения, но за счет высокого разрешения и четкости все дорожки печатных плат сегментируются. Что Вы можете видеть по результатам сегментации.
  4. Прошу помощи не получается запустить исходники http://cs.brown.edu/~pff/segment/ Знаю, много их использовали, но в линуксе не сильно силен. Копирую в папку, после этого выполняю команду <make>. Появляется файл *segment. Запускаю его командой: ./segment 0,5 20 20 /1/segment/test.png /1/segment/test1.png или ./segment 0,5 20 20 test.png test1.png Получаю ошибку: loading input image. terminate called after throwing an instance of 'pnm_error' Aborted Пробовал на 2 системниках CentOS и Debian результат тот же.
  5. Можно пример видео? Чтобы понять о чем идет речь.
  6. Наткнулся на сегментацию нейросетью. Результат очень впечатлил. Но возник вопрос с быстродействием. Это обработка в реальном масштабе времени? И каким компьютером?
  7. Я с Вами полностью согласен, поэтому хочу понять какие классы задач можно решать GPU. Если можно решить выше приведенный примитивный пример, то стоит GPU осваивать. На GPU хорошо решаются задачи выделения границ, получил частичку изображения и записал туда же откуда и взял. Это будет на порядки быстрее чем на CPU. Компрессию и так уже сделали уменьшив разрядность с 24 до 18. Дальнейшие уменьшение разрядности приведет к заметным искажениям. А размер таблицы гистограммы не зависит от размера изображения. Хорошо получаем множества таблицу другого вида, состоящую не из одного значения(количество пикселей данного цвета ), а из двух(номер цвета и количество пикселей). А вот задача получить конечную таблицу будет получить сложнее, чем просто посчитать цвета в изображении. На мой взгляд CPU данную задачу решит быстрее.
  8. Пример приведен для всего изображения. Да изображение я могу разбить на части и обрабатывать разными процессорами. Но создаваемая таблица размером 1 Мб должна быть доступна для всех процессоров и каждый процессор должен записывать результат непредсказуемо или в начало или в конец или середину этой таблицы. И основное время будет уходить не на вычислительные процессы, а на обращение к памяти. Как можно реализовать по другому? На CPU я могу прогрузить таблицу в кеш 2 или 3 уровня увеличив быстродействие. Как это реализовать на GPU быстрее, чем на CPU?
  9. Спасибо за ответ. Разбирал структуру CUDA. У меня почему то все задачи по компьютерному зрению сводятся к последовательному прохождению каким-либо окном по изображению и составлению таблиц. Последовательное прохождение по изображению хорошо работает с памятью, т.к. непосредственно работаю с кешем. А вот создание таблиц - это кошмар для кеша, если таблица занимает несколько мегабайт памяти. Так как неизвестно в какую область таблицы я перейду на следующем шаге. Структура CUDA (может я ее не правильно понял) будет отлично работать только для последовательной обработки изображений. Пример, изменение яркости изображения, когда идет последовательная подкачка памяти. А как работать с таблицами в несколько мегабайт? Простейший пример, на мой взгляд неэффективности CUDA: сделать цветную гистограмму изображения(т.е. посчитать количество пикселей каждого цвета). Даже если ограничимся 6 разрядами каждого цвета RGB, итого 18 разрядов. Размер таблицы 1 МегаБайт.
  10. Какой критерий выбора суперпикселей? В данном случае я вижу приблизительно 300 пикселей в 1 суперпикселе, на всем изображении ~1800 суперпикселей. Это будет сильно сокращать вычисления. И еще мне интересно время разбивки данного изображения на суперпиксели?
  11. Я провел сегментацию своей программой. Время сегментации одного кадра 30 мс. Поможет ли это вам для разделения объектов?
  12. Можете выслать несколько кадров из видео для того чтобы я мог посмотреть, как они будут сегментироваться моей программой. Результатами, если интересно могу поделиться.
  13. И все-таки я хотел бы получить более конкретный ответ по поводу быстродействия нейросети в данном случае. Как я понимаю, что это задача для одного компьютера, отрабатывать будет одна и та же видеокарта, поэтому предложенный мной подход должен работать. У вас хорошее предложение по поводу распараллеливания задачи. Здесь действительно хорошо можно разбить на потоки. Только я бы для упрощения на потоки посылал разные кадры, т.е. каждое ядро обрабатывает свой кадр.
  14. Интересно, сколько времени будет отрабатывать нейросеть сравнивая 300 возможных объектов?
  15. Если объекты абсолютно совпадают по цвету, то можно выполнить предварительную свертку базы объектов и делать такую же свертку объектов на картинке. Далее производишь сравнение сверток. Это значительно ускорит программу. Я думаю здесь подойдет 16 разрядная свертка типа CRC 16, но лучше использовать 32 разряда(CRC 32). Т.е. каждый объект будет представлять собой 4 байта. Тогда можно обрабатывать хоть все 60 кадров в секунду.
  16. У тебя основные объекты имеют размерность 25х25 пикселей. Координаты ты можешь заранее вычислить, где они появляются. Сокращать изображение ни в коем случае нельзя, т.к. различаемость и так не очень. Делай по пиксельное сравнение с базой объектов и программа должна "летать". 23 объекта на 625 пикселей и перебор 300 объектов итого нужно сравнить примерно 9 000 000 пикселей и 3 кадра в секунду ты гарантированно успеешь обработать.
  17. Т.е. Объекты появляются в одном и том же месте картинки?
  18. Все равно не понятно, какие именно объекты необходимо определять. Для моего понимания автору темы необходимо обвести все объекты видимыми линиями. Примитивно определять объекты можно по цвету, площади, вытянутости (отношение длинны контура объекта к площади).
  19. Изображение итак маленькое, при уменьшении боюсь возникнут сложности с распознаванием объектов. Может лучше прореживать кадры?
  20. Как я понимаю вашу секретность, Вы наверное решили обыграть онлайн казино?!
  21. Что понимать под быстро? Какое разрешение, количество кадров в секунду? Какой проц? Можно сравнивать по форме и цвету. Какое количество объектов в базе?
  22. Объекты одного размера? Освещенность одна и та же? Как их планируете сравнивать форма, размер, цвет?
  23. А что за объекты? Это тех процесс или съемка уличного движения? А лучше примеры видео с объектами.
×