Jump to content
Compvision.ru

2expres

Пользователи
  • Content count

    102
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by 2expres

  1. Добрый день! Данная задача решается методом сегментации и последующей векторизации. Сегментация и векторизация - есть в моей программе "Лубок". Далее выполняется аппроксимация дуги ломанной линией, что тоже реализовано в данной программе. Для определения диаметра дуги остается построить перпендикуляры из середины отрезков, которые образуют ломанную и найти их точки пересечения. Точка их пересечения и будет центром окружности. Точки будут иметь небольшой разброс, но это решается кластеризацией, что позволит найти центр тяжести. Вышлите примеры фотографий, чтобы можно было более детально протестировать. P.S. Я смогу решить данную задачу, но без применения OpenCV и C++.
  2. Кластеризация - это почти что сегментация изображения, а задача стоит обратная: упростить сегментацию используя меньшую цветность. Нет ли более примитивных средств?
  3. Получить общие точки SURF

    При обработке приведенных Вами изображений я вижу следующие проблемы: 1. Это освещение. Оно должно быть мягким, равномерным и не давать бликов. 2. Как правило элементы на разных платах установлены по разному, могут быть смещения, резисторы, конденсаторы, транзисторы, диоды могут быть под небольшими углами (что допускается по ГОСТу). Как вы планируете это учитывать? Я пытался решить вопрос с контролем качества печатных плат (целостность дорожек). Теоретически все получается, но столкнулся с проблемой освещения. Не удалось создать равномерное освещение. Сравнение проводил путем сегментации изображения и сравнения количества и площади сегментов. Если сегментов больше, то обрыв дорожки. Если меньше "закоротка".
  4. Работа с float изображением

    А как будет с таким изображением? или
  5. Работа с float изображением

    Я правильно понимаю, что это задача определения угла горизонта для беспилотника?
  6. Спасибо, за ответы. Оставляю идею реализации детектора движению - значит, не мое это. Тогда хочу реализовать определить товара соответствует он штрихкоду или нет. Это может быть интересно совместно с определителем штрихкодов, который я уже реализовал. Там нет ветра, снега и с тенями проще, можно сделать искусственное освещение. Товар, так же как и штрихкод должен определяться под любым углом и сравниваться с базой данных. Должно производится так же автоматическое формирование базы данных, т.е. раз сфотографировав новый товар он автоматически заносится в базу данных. Никто не встречал готовых решений в этом направлении?
  7. Детектор движения можно реализовать и без суперпикселей, применяя сегментацию. Сравнили 2 картинки, нашли разность между нами. Предположим белый фон - это тот что не меняется, черным это изменение между 2 картинками (перемещаемые объекты). Провели сегментацию. Учитывая, что у нас только 2 цвета черный и белый сегментация будет очень быстрой. Самый большой черный сегмент и будет перемещаемым объектом, малые сегменты, которые могут быть из-за дождя, снега и/или ветра отбрасываем. Далее находим контур этого объекта и подсвечиваем. Как на Ваш взгляд нет тут подводных камней?
  8. Спасибо, буду разбирать. По поводу коэффициентов сегментации, мы выложили редактор в открытый доступ с надеждой, что какое то количество людей им будет пользоваться и расскажут, какие коэффициенты использовались в том или ином случае. Так же важна предварительная обработка исходного изображения, такая как размывка и преобразование цветов, то что делается онлайн трассировщике, ссылку на который Вы давали. Для преобразования цветов, есть мысли выполнять цветную гистограмму и оставлять ограниченное количество цветов. В трассировщике онлайн максимальное количество цветов всего 32!!! Это очень мало. Начинать надо с 256 и до 4096 цветов для получения более или менее реалистичного изображения. Алгоритм цвета наиболее часто встречаемые заполняются в таблицу, а остальные цвета заменяются на ближайшие из таблицы. Получаемые нами сегменты можно рассматривать, как суперпиксели? Получили мы суперпиксели, как их дальше использовать?
  9. Интересны Ваши идеи. Конечно можно было бы заполнять полученные сегменты кругами и другими фигурами. Можно заполнять фигурами с ободками, прямоугольники будут в виде кирпичной кладки. Развитие редактора в этом направлении - это арт-искусство, но нам более интересно техническое применение. По поводу сегментации написаны сотни статей, защитили десятки диссертаций, а по пост сегментной обработке очень мало информации. Может потому что не получены практические результаты? http://www.nihilogic.dk/labs/evolving-images/ - ответ 404
  10. Спасибо, за оценку. А что такое генетический алгоритм? Как можно сравнить скорость выполнения сегментации и/или векторизации? По онлайн сравнить нельзя:(
  11. Реальные фотографии очень плохо поддаются векторизации. Для них не проходит оптимизация векторного файла:( для нашей программы. Когда проводятся проводятся границы между сегментами, каждый сегмент описывается отдельно. А надо было бы использовать только одну границу или одного или другого. Иначе за счет погрешности апроксимации между сегментами появляются зазоры, которые сильно портят картинку. Так что у нас есть еще работа по совершенствованию наших алгоритмов. Итак загружаем картинку. Выбираем Эффекты-Размыть-Легко!!! Сегментация - 8 связная сегментация. Погрешность устанавливаем в 2, повторения 4. Для более качественного изображения, количество повторений нужно уменьшить, но увеличится объем .svg файла. Нажимаем "Ok". Далее "Сегментация-векторный файл .svg"-БЕЗ ОПТИМИЗАЦИИ. Отбрасываемых сегментов выбираем "0". Результат: dev.svg. На мой взгляд по качеству передачи исходного изображения она лучше, т.к. более естественный цвет глаз и меньше пятен. Объем файла чуть меньше. Если мы доработаем оптимизацию, как было сказано выше - это позволит сокращать размер файла или с тем же размером получать лучшее качество.
  12. Да, есть проблема с мелкими отбрасываемыми сегментами. С этим, конечно, надо что делать, но пока процессе поиска решения. Буду рад любой наводке по этой теме. Прошу дать исходное изображение для экспериментов. Посмотрел сайт https://www.vectorizer.io/ : 1. Они обрабатывают изображения до 1 МБайта. 2. Перед обработкой они делают размытие изображения и преобразование полноцветного RGB в изображение 4, 8, 16 или 32 цвета. Эти действия можно сделать в нашем или другом редакторе до сегментации. Я бы разделил сегментацию изображения на техническую сегментацию для определения объектов и творческую для получения красивых картинок. Красивые картинки можно получать и нашим редактором, нужно время и фантазия корректирую вручную исходное изображение. Пример: результат с сайта kot.svg. Результат 32 цвета и без размывки. результат нашей программой после корректировки исходного изображения: kot1.svg Погрешность - это разница в между объединяемыми пикселями. Повторения - количество проходов с добавлением на каждый проход погрешности. Оптимизация SVG файла - это апрокимация прямыми линиями (хотелось бы кривыми Безье, но это в будущем). Погрешность - это максимальное отклонение прямой от реальных точек. Чем больше погрешность тем меньше файл, но и большее искажение объекта. Все зависит от конечных целей пользователя.
  13. Спасибо, Smorodov! За первую найденную оплошность в обработчике клавиатуры не стоял ret. Если нажать не нужную клавишу программа вываливалась. А так как всегда нажимались только нужные клавиши - это и не видели. Это еще раз доказывает, что программу должны тестировать тестировщики, а не разработчики. Новая версия уже на нашем сайте http://esm.ho.ua/Automat.html. P.S. Давайте отвлечемся от ассемблера. Интересно мнение людей, которые воспользовались программой в области сегментации/векторизации или определения штрихкода. Было интересно получить Ваше мнение в сравнение с другими продуктами. Остальные вещи можно наверняка найти в других редакторах. P.P.S. Так же интересует тема пост сегментной обработки изображений.
  14. В чем то Вы правы, ассемблер требует больше времени для написания программ. Но тут есть и положительные моменты, более продумываешь алгоритм самой программы, как ее минимизировать. Я хотел написать детектор движения на ассемблере, вроде теория понятна, но все равно - это требует времени. На написание и отладку определителя штрихкода у меня ушло 3 месяца. К тому же увидел на форуме, что Вы его уже реализовали и сейчас встал вопрос стоит ли повторять уже написанное? В основном все и простые и сложные алгоритмы обработки в области компьютерного зрения, на мой взгляд, сводятся к последовательному прохождению одним или несколькими окнами обрабатываемого изображения. Это относится к фильтру Соболя, детектору определения кожи, быстродействующей сегментации. Для 4-х связной сегментации берем окно из 5 пикселей, для восьмисвязной сегментации окно 3х3 пикселей. Количество проходов указывается в программе.
  15. Мы начинали с фильтров выделения границ. Думаю, как и многие начинал со шрека: Результат в редакторе "Лубок": Это фильтр Соболя(Эффекты-Карандаш Т), который дополняется преобразованием в черно-белое изображение и инверсия. Не понятно, что дальше делать с этими выделенными краями, но это очень быстрый и простой алгоритм. Мне не понятно почему алгоритм Канни выполняется быстрее, чем Соболя в OpenCV... Я не знаю OpenCV, но из ходя из теории алгоритм Канни требует больших вычислений. Меня больше интересует сегментация изображений. Она позволяет вычислять размеры, форму, количество объектов. Это гораздо более ресурсоемкий процесс интересно сравнить получаемые результаты, например, с OpenCV. Хотелось сравнить результаты по быстродействию и качеству сегментации. P.S. На каком процессоре вы получили данные результаты? замеры времени я делаю с помощью TimeGetTime. Бывает расхождение на 16 мс в исполнении на моем ноутбуке, я так понимаю это отнимает Windows.
  16. Фильтр Соболя выполняется должен выполнятся быстро, хотя измеритель времени туда мы не подключили. Это примитивная функция обработки окном 3х3 изображения за один проход (модифицированный быстрый алгоритм). Измерители времени подключены только к программам, которые выполняются долго - это сегментация изображения, векторизация и определение штрихкода. Время выполнения вы можете посмотреть в нижнем статусном окне в миллисекундах. Если нужно можем вставить измеритель времени и на другие подпрограммы - это не сложно. Мне будет сложнее разобраться с OpenCV и честно говоря обломно:( , т.к. большое количество людей с ним уже работает, а я хочу найти свою не затоптанную поляну. Но буду очень признателен, если Вы проведете измерения. В данный момент снова началась гонка между двумя мастодонтами AMD и Intel. AMD выпустила Ryzen, теперь подождем чем ответит Intel. Переключаться с одной архитектуры на другую я не вижу смыслу, буду пока узко направленным специалистом.
  17. Компьютерное зрение - очень обширная тема, в которой множество приложений. Мы для себя выбираем нишу быстродействующие процессоры и быстрые программы. Сравните параметры процессоров X86 и ARM по быстродействию, разница на порядок?! Я с вами согласен, что это узкое применение, но и моя программа не сильно привязана к Windows. Использовано только оболочка для запуска, отображения(WinAPi) и GDI+ (для преобразования форматов в BitMap). Поэтому мы можем перейти на любую операционную систему Linux, DOS или свою.
  18. Добрый день! Ищу задачи в области компьютерного зрения.Мной написана программа "Лубок" (http://esm.ho.ua/Automat.html) - это графический редактор с элементами компьютерного зрения. Он позволяет сегментировать изображения, преобразовывать растровые изображения в вектор, реализованное практическое применение определение штрихкодов. Что я могу предложить заказчику, перед тем как взяться за работу протестировать все имеющиеся у меня алгоритмы в программе "Лубок" применительно к вашей задаче. После этого я смогу сделать заключению смогу выполнить поставленную задачу или нет. Специализация: построение быстро выполнимых алгоритмов для решения задач в реальном времени. Уже сейчас я могу находить объекты на изображении, оценивать их размеры, количество, форму. Я не могу выполнить абсолютно все задачи в компьютерном зрении - но перед тем, как взяться за новую задачу, я проверю возможность ее решения.
  19. 500 кадров в секунду при 4 МП - это конечно круто. Такую обработку на одном процессоре, конечно, потянуть невозможно. Например, мы обрабатываем штрихкод 16 МП камерой за время 0,2 секунды. Итого только 5 кадров в секунду, но для некоторых применений этого вполне достаточно. На сегодня никакой процессор ARM такую обработку не потянет. По поводу языка программирования теоретически можно писать даже на Delphi с ассемблерными вставками, но мы не хотим привязываться к Windows. В быстродействующих и надежных системах Windows вообще не должно быть. А редактор - это стенд для отладки наших возможностей в компьютерном зрении, просто тотальное большинство имеет Windows.
  20. Спасибо, за первый обнаруженный ляп. Постараюсь исправить все обнаруженные ошибки. У меня желание работать в области компьютерного зрения в реальном масштабе времени. Для этих задач подходят только быстродействующие процессоры, но даже зачастую сегодня не хватает их производительности. Процессоры ARM по производительности в разы хуже, пока переход на них не вижу смысла. В случае возникновения острой необходимости перевести программу на ARM - есть успешный опыт автоматического перевода ассемблера X86 на ассемблер Z80, PIC18F (архитектура RISC).
  21. Примеры использования: Допустим необходимо перевести данное изображение в вектор. Это изображение хорошего качества, потому отлично сегментируется. С помощью редактора "Лубок" загружаем картинку. Выбираем вкладку "Сегментация" - "8 связная сегментация". Для сглаживания структуры выбираем максимальную погрешность "25", а повторения достаточно "1". Нажимаем "Ok". Далее можно посмотреть удовлетворяет Вас сегментация включив "Выбор сегмента". Сегменты можно просмотреть нажимая левую кнопку мыши. Для получения векторного файла выбираем вкладку "Сегментация"-"Векторный файл .svg"-"3пкс". Далее смотрим папку, где расположен исходный файл и в ней будет файл *.svg с тем же названием. Масштаб - этого файла будет таким же, какой масштаб Вы выбрали перед векторизацией. Пока все, отвечу на любые вопросы.
  22. Да, я погорячился по поводу метода векторизации рассеянных кривых. Метод интересен для реалистичного представления изображения в векторной форме. Но у меня другая цель. Я хочу обрабатывать реальные изображения, сегментировать и с помощью базы данных определять объекты на изображении. Поэтому реалистичное представление не требуется. Человек по картинке лубок или примитивному рисунку может определить, что на ней нарисовано, так же и программа должна определять по контуру, расцветке - что изображено на фотографии. Мне не понятно что такое каскадное преобразование, классификатор, метки объектов? Хотелось бы больше информации на эту тему. Так же интересно про детектор кожи, теория сравнения лиц. На сегодня очень хорошо и быстро получается определять штрихкоды на фотографиях большого размера, где штрихкод занимает 1% площади всего изображения.
  23. Посмотрев на результат обработки дельфина пришел к выводу, что результаты работы примитивного градиентного фильтра типа Соболя. Обработал моей программой исходное изображение фильтром Соболя, результаты выкладываю: Исходное изображение Результат фильтра Соболя Дальше можно пропустить через пороговый фильтр, линии заменить одной толщиной по алгоритму Канни и получим результат французских ученных, ну если еще линии заменить синим цветом. del.svg - результат в .svg. Сегментация моей программой. Можно рассмотреть CoralDraw предварительно разгруппировав. Море (верхняя часть) выделяется одним большим сегментом, дельфин состоит из небольшого количества сегментов. Нужна вторая часть программы, которая бы комбинировала эти сегменты и сравнивала с базой данных, для автоматического определения объекта. Нужна информация именно на этот предмет. Суперпиксели, они не столько сжимают информацию, как моя программа и что с ними делать после их получения?
  24. Что говорит теория на этот счет. Проводилась сегментация одних и тех же фотографий разными людьми вручную. В результате получали различные сегменты. Получить однозначную сегментацию на реальных изображениях часто не представляется возможным. Мое мнение, что вначале должна производится предварительная сегментация, которая дает большое количество сегментов. Таким образом мы резко уменьшаем объем информации по сравнению с растровым изображением, а следующий этап обработки - объединение и возможные комбинации этих сегментов между собой для индентификации объектов. Формальную сегментацию и векторизацию я выполнил. А вот со вторым этапом есть только смутные идеи. Так же имею недостаток теории на этот предмет, буду благодарен если подскажете, что можно почитать из теории (только не OpenCV, т.к. строю быстродействующие программы).
  25. Для получения сегментации задаются коэффициенты. И можно получать грубую и очень реалистичную сегментацию, но при реалистичной сегментации увеличится количество сегментов и соответственно размер файла. Все зависит от того какие задачи мы решаем, такие коэффициенты мы и подставляем. Если нужно найти объект, то берутся грубые коэффициенты, как на данных примерах. Я не знаю что такое meanShif. За сколько времени он обрабатывает данные фотографии?
×