Исследовательский проект "Цифровая оптика" .

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 26.04.2020 01:44:20

Ура ! Раскопал модуль ocv.cls.features2d и пример FeatureDetector.dpr
Там есть все методы скопом .

Alex2013 как вы это делаете? :)
Начну из далека.Образование я так до конца и не получил,что совсем не мешает программированию оставаться полезным(и приятным хобби,но бывает и помучится приходится).
Заинтересовала меня тема поиска изображений,сначала прямое по-пиксельное было,потом по похожести процента пикселов.
Это всё очень просто подумалось мне,Захотелось крутого,как научных видео показывают.
Начал читать и понял мне моя математика не позволяет заглянуть глубже,а там самое интересное.
Последний месяц вообще ничего не делал толком.
Читал про кросс корреляцию - В основном с неё советуют начать.
И даже понятные разъяснения есть.
Но поскольку с математикой туговато ,некоторые формулы я вообще не помню.
Я начал искать реализации в коде,любых более менее читаемых языков похожих на Паскаль/Делфи и,с колледжа чуть Си помню.
Для того чтобы пошагово понять работу алгоритмов,наглядно так сказать.
В общем мои знания пока теория,просто взять и написать код по формуле я не смогу,раньше мог если что-то знакомое.
кстати еще есть ORB и BRIEF.

Читал про них тоже.
вроде ORB что-то типа ориентированного FAST...
В общем кратко не получилось,цель у меня была такая:
Найти алгоритмы распознавания в исходниках на делфи,или на чём то читаемом,
потом сравнить лабораторно-т.е. дома скорости и точности,
И в конце концов знать для чего какой алгоритм предпочтительней,что он быстрей/лучше ищет.
У меня кстати завалялся исходник нейросети,но я не вникал особо,обучал её часа три вроде распознаёт буквы :)

Добавлено спустя 21 минуту 40 секунд:
А, и ещё.
Заморочился я этим после того как увидел что не обновлялась openCV для делфей долго,и прикрутить его проблемно.
По поводу FAST выбрал потому что первое что нашел,да и реализация его несравненно проще.
Начинать решил с малого,постепенно вникая и осваиваясь,попутно читая хоть чтото.
В русском сегменте вообще мало понятных статей про работу алгоритмов,всё что я видел в большинстве куча формул и ни одного объяснения.
Ну про преобразование Фурье вполне понятно где-то читал.
В случае картинки это как я понял частотное распределение градаций яркости.
И при кроссКоррелляции мы получим "накопение" похожести в результирующей матрице (вот тут не уверен)нормируя её вычитанием средней дисперсии-это я своими словами то что понял пока

Добавлено спустя 12 минут 35 секунд:
"Каскады Хаара" хороший выход, но готовых профилей для ладони не нашел.
Может что посоветуешь ?

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

Добавлено спустя 21 минуту 45 секунд:
Пока я занимался "подготавливающими фильтрами" для картинок типа:
поиск контуров,эрозия дилатация,бинаризация по порогу,по похожести цвета и т.п.
Ну и само собой Канни,Лаплас,Робертс, немного Гаусс.
Последнее что делал поиск и векторизация контура для распознавания букв(печатных,но написанных под разными углами)
И пока только посмотрел как работает скелетизация Жанг-Суня.

Добавлено спустя 11 минут 39 секунд:
Щас подумал вам возможно Поиск контура к поиску ладони прикрутить можно,не уверен за результат конечно...
Я ещё не пробовал, но инвариантность к масштабу этой ладони точно будет :)

Добавлено спустя 9 минут 55 секунд:
Да и к повороту тоже,но только в плоскости параллельной камере видимо...

Добавлено спустя 11 минут 58 секунд:
Не нашел как включить оповещения на почту о новых сообщениях в теме...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Alex2013 » 27.04.2020 05:58:40

1 Рано радовался ... в ocv.cls.features2d.pas плотно используют дженерики (в свежих версиях FPC есть но хочется сохранить совместимость с версиями где бинарник поменьше принципе все адаптируется но возни "мама не горюй" :roll: ... )
2 Распознавание "Попиксельно и рядом"( с фильтрами, бинаризацией, уровнем шума, поворотами и т.п. ) в реальных условиях нормально не работает (в свое время угробил тучу времени) "идея блеск" но в реальности даже для поиска метки не годится.
3 Долгое время сопротивлялся использованию OpenCV ("кот в мешке на "крестах"(С++), местами глючный, плохо совместим с дельфи и лазарусом ) Но выкинув "родные" методы захвата изображения с камеры, и прейдя на более свежие версии получил нечто более менее стабильное. Все-же скорость методов OpenCV для сложных алгоритмов типа "детектор границ Канни (Canny)" на порядок выше чем то что можно "написать в лоб" (да самодельный вариант может работать заметно качественнее но скорость все убивает ). (Сравнить софт версию и OpenCV детектора Canny можно в моей "Подзорной трубе" в окне "цифровые эффекты" )
4 Моя "исследовательская платформа" отчасти эдакое "кладбище алгоритмов " (так и задумано ) например модуль UCanny.pas софт версия детектора Canny (+ как этапы обработки красивый "честный" Гаус и Собел )+ всякой самодельной "твари по паре" можете пользоваться ... отдельно радует найденная в сети безымянная но качественная бинаризация и "скелетизация" ZhangSuen. )
5 Кстати интересно было бы увидеть ваш аналог подобного модуля .(Единственная хитрость UCanny.pas в том что используется работа "в обход канваса" что в любом случае быстрее но до OpenCV еще довольно далеко )
6 Кроме моих самоделок в комплект входит библиотека FastDIB . (модули Fast*.pas)
7 OpenCV применяется немного "в слепую" то есть потихоньку адаптирую и утилизируют разнообразные примеры но в механике разбираюсь еще слабовато .
8 "Каскады Хаара" в моей программе работают "на ура" но только с готовыми профилями, а обучать их самостоятельно еще не пробовал.
9 Кроме основной цели проекта (создания ДР-интерфейса) есть еще мысли разобраться "чистым ВиАр" интересуют любые примеры на паскале и особенно с использованием OpenVR Потому что использовать для простого вывода картинки в ВиАр-шлем кучу лишнего софта типа Virtual Desktop, VR Toolbox, Bigscreen Beta и т.д. достаточно накладно в плане и так нелишних ресурсов компьютера и просто неудобно .
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 27.04.2020 06:19:36

5 Кстати интересно было бы увидеть ваш аналог подобного модуля

Ночь не спал...Про какой вы модуль?Зонг-Сунь?
У меня куча ещё "не посмотренных исходников" пара реализаций детекторов границ в виде матриц.
И да, то что я тестирую стараюсь переделать на прямой доступ к памяти.Выглядит ужасно но работать начинает быстрее.
Честно говоря (хотя ни один из тестов ни разу не проект)
В тестовых проектах такого бывает наворочу,что самому понять трудно.

Добавлено спустя 26 минут 34 секунды:
2 Распознавание "Попиксельно и рядом"( с фильтрами, бинаризацией, уровнем шума, поворотами и т.п. ) в реальных условиях нормально не работает (в свое время угробил тучу времени) "идея блеск" но в реальности даже для поиска метки не годится.

А чем вы метку ищете на кадре?
В теории я бы попробовал,да времени не хватает сейчас,что-то типа
Массив контуров(для начала просто массив связных областей)
Заполняется с кадра ,по некоторому критерию яркость ,цвет форма или площадь,возможно всё вместе
отбираются подходящие.
Далее центр масс,векторизация контура по границе и центру масс,нормализация векторов по максимальному.
Получается нормализованная,инвариантная к повороту и масштабу гистограмма.
Для уменьшения вычислений возможно брать не весь контур а через одну точку к примеру.
Я начал этим заниматься только на днях ,и пока всё кривое и косое в коде.
закончу с массивами векторов попробую на ладони посмотреть

Добавлено спустя 4 минуты 56 секунд:
Оу... 265 килобайт ораничение
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Alex2013 » 27.04.2020 14:55:03

1 За исходники спасибо ! ( Посмотрю хотя я еще до Delphi_DCR.zip не добрался "ночь улица фонарь ... " и т.д. :wink: )

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

3 Метку искал кучей способов во первых пробовал самодельный метод "распознавания в лоб" (почитайте тему там описаны все "этапы большого пути" ) во вторых пробовал "распознавание без метки " "по характерным точкам" которые можно выставлять самостоятельно, в третьих пробовал использовать бар-коды (QR-code, Aztec, DataMatrx.) в принципе Aztec работает неплохо, но или библиотека OMarks.dll кривая или я ее криво подключил так что работает нестабильно,пока остановился на поиске "шахматки" через OpenCv просто достаточно стабильно но пока медленно (нужно подобрать предобработку ).
(все способы оставлены как "историческая" часть проекта и доступны во всех сборках (Окно "Слежение за объектами" - инструкции можно прочитать в теме, "логе дополнений" Truba_DS_*.TXT или посмотреть в скриншотах )

4 Каскады Хаара для поиска метки не годятся, так как не позволяют определить расположение меток в пространстве (но возможно вполне реально использовать их для быстрого предварительного распознавания ).

5 Интересно, что вы хотите получить на выходе своего проекта? :idea: У меня это целое "дерево целей" от ДР-интерфейса до программы просмотра видео с возможностью нелинейного "видеомонтажа налету" и видео аналитики ( отслеживание объектов, видео сигнализация, мониторинг состояния и развития растений через анализ спутниковых изображений и т.д.)) и много чего другого .
Последний раз редактировалось Alex2013 01.05.2020 15:03:05, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 27.04.2020 21:40:57

Интересно, что вы хотите получить на выходе своего проекта?

Честно,не знаю...как минимум тоже "кладбище алгоритмов".
Про ваш поект читал уже несколько раз,сейчас еще перечитываю.В код смотрел раньше,ещё в прошлом году,потом кошки угробили ноутбук на котором это всё было.
Точно помню должен быть у меня модуль с Кэнни,но что-то не нахожу его на своих гугл и яндекс дисках.
Помню потому что переписывал его кстати с Free Pascal ,в делфи компилятор ругался на отсутствие у битмапа свойства (название не помню,аналог ScanLine...но не построчно а целиком)
Наверно я отсюда его и брал,ваш модуль.Но тогда у меня должен быть ещё один даже не модуль просто функция Кенни строк на ~80-100 но с ней что-то было странное.
В общем посмотрю на досуге.
Вот сделал мини тестовую сборку по простым фильтрам
2020-04-27_200515.png

Demo1.7z

Прикрутил это всё к потоковому выполнению,а то раньше через таймер дёргал.
Делает скриншот регинона и потом обрабатывает.Это так ,на поигаться.Проект выкладываю.
На небольших размерах и однократном фильтре до 60 кадров обрабатывает
2020-04-27_203142.png

Модуль камеры не стал прикручивать,хотя было бы удобней напрямую с ней работать.
Подскажите какой компилятор взять для FPC ?
Есть ли где адекватный профайлер?На делфи как то своими силами выкручивался,пишу на 7 версии.В новых много добавили но мне кажется 7 шустрее,хоть и не умеет в векторные вычисления на современных процессорах-А это до 4х кратного прироста в скорости обработки теряется.Ставил также Комьюнити Эдишн последнюю 10.2,она мне неповоротливой показалась на ноутбуке.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Alex2013 » 27.04.2020 23:50:32

1 Ставьте свежий лазарус версии 2 + и не заморачивайтесь выбором FPC (те что древнее примерно 2.6 глючный до ужаса новые транки тоже с "приветом" та что стандартный 3.04 видимо неизбежен пока особой разницы с 2.6 не увидел, а код бинарниках меньше скорее всего из за старой версии LCL в старом танковом лазаре 1.7 )

2 Профайлер в моем случае применять солжно (Таймеры, потоки,ДиректХ и т.п. ) так что спросите в разделе "Lazarus"
3 Дельфи 7 к сожалению давно "мертвый язык" а Лазарус и FPC переняли множество новинок из старших версий Дельфи + есть кое что свое .
4
Вот сделал мини тестовую сборку по простым фильтрам

Гляну похоже на мой ConvolveFilter ...
Код: Выделить всё
procedure ConvolveFilter(var Src: TBitmap; Filternr,Edgenr: integer);
//"Матричный фильтр"
{ Filternr - 0-8
  0: Laplace
  1: Hipass[quote][/quote]
  2: Find Edges (top down)
  3: Sharpen
  4: Edge Enhance
  5: Color Emboss (Sorta)
  6: Soften
  7: Blur
  8: Soften less
}

В свое время я как и многое другое выдрал его из старой и всеми забытой библиотеки к KOL-MSK (Исходный вариант без адаптации к лазарусу тут https://github.com/rofl0r/KOL/blob/master/units/janfx/KOLjanFX.pas )
Единственное достоинство ConvolveFilter в том что он довольно быстр но качество всего набора фильтров довольно сомнительное .
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 28.04.2020 02:26:01

Профайлер в моем случае применять солжно (Таймеры, потоки,ДиректХ и т.п. )

Ладно завтра тогда уже буду ставить и смотреть.
Вот мне интересно собираюсь посмотреть,в одной из демок к ОпенГЛ,
тоже в прошлом ковырял без особого интереса,а так из любопытства,
У меня счетчик кадров внутренний зашкаливал за 380-400 ФПС на маеньких изображениях...(640*480)рендер плоскости на которую натянута текстура.
Плоскость в пространстве перемещать можно было и вращать.
Возможно ли достичь быстрой обработки если использовать обсчёт на видеокарте?
К примеру видел модуль выполняющий шейдеры мощностями видеокарты,только я них не шарю совсем.
Вы не смотрели в эту сторону?

Добавлено спустя 5 часов 56 минут 58 секунд:
https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html
Занимательная вещь.Обещают быстрое распознавание,но немного не то что вам нужно :)
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Alex2013 » 28.04.2020 13:34:26

IvoX писал(а):Добавлено спустя 5 часов 56 минут 58 секунд:
https://storage.googleapis.com/tfjs-mod ... amera.html
Занимательная вещь.Обещают быстрое распознавание,но немного не то что вам нужно

Тормоз страшенный (Сетка у меня вполне быстрая так что дело не в ней )....

Добавлено спустя 2 минуты 46 секунд:
IvoX писал(а):Возможно ли достичь быстрой обработки если использовать обсчёт на видеокарте?
К примеру видел модуль выполняющий шейдеры мощностями видеокарты,только я них не шарю совсем.
Вы не смотрели в эту сторону?

Копайте в сторону OpenCL... https://ru.wikipedia.org/wiki/OpenCL

Добавлено спустя 11 минут 9 секунд:
Alex2013 писал(а):У меня счетчик кадров внутренний зашкаливал за 380-400 ФПС на маеньких изображениях...(640*480)рендер плоскости на которую натянута текстура.

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

Добавлено спустя 33 минуты 26 секунд:
IvoX писал(а):Вот мне интересно собираюсь посмотреть,в одной из демок к ОпенГЛ,

Ну у меня есть огрызок загрузки модели в Ogl (довольно криво если честно зато "из серии проще не бывает" )
ИзображениеИзображение

ИзображениеИзображение
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 28.04.2020 18:56:57

Тормоз страшенный (Сетка у меня вполне быстрая так что дело не в ней )....

А я грешил опять на свою камеру медленную,в любом случае даже просто в приложении винды(Камера) видно, очень мало ФПС камера посылает в систему
на глазок 5-15 кадров.Да и характеристики в 0.3 Мпикселя ...640*480 но тоже враньё
там по факту 320*240 интерполированные через драйвер.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение olegy123 » 30.04.2020 04:30:14

IvoX писал(а):Возможно ли достичь быстрой обработки если использовать обсчёт на видеокарте?

На некоторых видеокартах стоят более 8К вычислительных блоков, по стравнению с топовыми CPU(до 32ядер) явно будет получше. поэтому прокачка больших потоков с максимальной скоростью - только с GPU можно достич высоких показателей.
Но не все операции на GPU эффективны из-за особенности устройства памяти и вычислительных блоков(точности float и т.п), где то, при определенных показателей эффективность может оказаться не выше или даже ниже обычного CPU.

CUDA/OpenCL сводится к тому чтобы подготовить ячейки(Cells - они же ядра) и память к работе: выделить ядра(их кол-во), выделить память(она там может быть разной: откуда брать данные(Read), куда складывать(Write), есть ли перекрестная память(RW - крайне нежелательная), скомпилировать "программу" для ядер. Далее заполняете память GPU входящими данными..
Очень похоже на работу как у стиральной машинке: выставляете программу, загружаете бельем, она там греет воду, крутить, отжимает. А вы ожидаете когда ядра закончат работу и GPU вам прозвенит что все, стирать ваши данные перестала..Далее вынимаете, сгружаете данные из GPU к себе и все..
Если нужно серию операций выполнить то загружаете-стираете-выгружаете, загружаете-стираете-выгружаете,загружаете-стираете-выгружаете и так далее..


Добавлено спустя 4 минуты 43 секунды:
IvoX писал(а):640*480 но тоже враньё

попробуй напрямую jpg/bmp взять, а не mov. зависит от чипа, его скорости упаковки в jpg и usb шины(скорее она у тебя 1.0 версии. даже не 2.0, там скорости 12мб/сек не 480мб/с)
скорость упадет но картинка будет получше.

Добавлено спустя 12 минут 6 секунд:
Alex2013 писал(а):
Alex2013 писал(а):У меня счетчик кадров внутренний зашкаливал за 380-400 ФПС на маеньких изображениях...(640*480)рендер плоскости на которую натянута текстура.

Вполне вероятно то это немного "лапша на уши" данные буферизуются в GPU, а не используются сразу. К тому же современные 3д-сцены при рендеринге иногда содержат десятки миллионов полигонов. Так что простые изображения разумеется будут "летать" но толку от этого мало.
"буферизуются в GPU" - :D
буфиризироватся может кадры при выводе на экран, ну или для размытия при движении, или для четкости границ(удаления лесенки в границах)
Сейчас даже 10летние видео-акселераторы дают более за 2000fps при рендеринге простых сцен (измерения были проведены Intel® Core™ i5-650 на встроенном Intel® HD Graphics), при отключенной видиосинхронизации, она срезала до 200fps~300fps..
мобильная GF 650 вообще давала за 3000fps

Добавлено спустя 16 минут 2 секунды:
Alex2013 писал(а):Все-же скорость методов OpenCV для сложных алгоритмов типа "детектор границ Канни (Canny)" на порядок выше чем то что можно "написать в лоб" (да самодельный вариант может работать заметно качественнее но скорость все убивает ).
скорее там используются комбинированные методы при решении задач, opencv может скомпилирован с учетом оптимизиции обработки процессором, оптимизиции памяти(выравнивания, перевода в точность, даже слои цветности там разделены(RGBA) не просто так)

Добавлено спустя 4 минуты 27 секунд:
IvoX писал(а):Заморочился я этим после того как увидел что не обновлялась openCV для делфей долго,и прикрутить его проблемно.
советую все таки заморочится и прикрутить. И начать использовать функционал.
Прикрутить лучше си вариант, си++ не дружественен к линкованию

Добавлено спустя 10 минут 52 секунды:
IvoX писал(а):В русском сегменте вообще мало понятных статей про работу алгоритмов,всё что я видел в большинстве куча формул и ни одного объяснения.
ничего страшного там нет, там нужно понять лексикон OpenCV который сводится к получению изображений(картинку, даже из видеопотока получаете картинку), перевод картинки в некий формат(цветной в одноцветный, как правило в градацию серого ). Далее начинаете работать с различными "хим"-функциями OpenCV по получению нужных вам данных: типа определению границ и перевод их в геометрические фигуры, размеры их и т.п. или нахождению разности/изменении к предыдущей картинки..

Посмотрите и разберите примеры - они короткие и понятны будут даже школьнику 7 класса, вам нужно понять "лексикон", предментую область.. это как разбираться в экселе с их функционалом "СУММ(ячека,ячека)".
Надо только начать, надо прыгнуть "в эту воду".
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 30.04.2020 09:07:26

olegy123 писал(а):скорее она у тебя 1.0 версии

Скорее 1.1 , не копал.Камера нонейм как и в большинстве бюджетных ноутбуков(до 30к ).
в 2016 куплен взамен разбитому кошками "Старичку" : i7 3630qm +8Gb +Gt740m+ 3750 гигабайт жестких дисков :) да, больше 3 Терабайт в ноуте 2014 года
Который и сейчас бы тащил как два таких бюджетных.Вот в нем камера была лучше .
Когда добавлял памяти(от старого подошла) не обращал внимания,но порты периферии все 3,0,для камеры свой отдельный разъём на плате.
olegy123 писал(а):советую все таки заморочится и прикрутить


Ну прикручу,и будет CV что то делать.
У меня нет как такового технического задания что-то конкретное выполнить.Важен не результат...
Откуда придёт понимание алгоритма того что делает CV внутри себя?
И как узнать к примеру что за данные лежат в дескрипторах особых точек,это ведь не просто набор векторов или других цифр,они должны что-то значить...
Проблема во мне.Я при написании какого либо кода думаю абстрактно а не формулами.
"Взять цвет,перевести RGBA->HSL,заполнить массив данными цвета преобразованного в Grayscale 0.299 R + 0.587 G + 0.114 B"
Хотя на современных дисплеях 0.2125, 0.7154, 0.0721 получше будет.
Про FAST я допустим читал,и понимаю что ищутся углы,и понимаю каким образом это происходит,но формула
2020-04-30_073346.png

этого с первого взгляда не объясняет а вот текст объясняет что впринципе делается.
Да и в конце концов для этого есть Python,где всё удобнее для утилизации функционала OpenCV...говорят в 15 строчек можно уложиться.
И даже хотел это всё начать,но скорость оптимизированной библиотеки просто режется тем что язык Интерпретируемый,и невозможностью создать портативное приложение(хотя я глубоко не копал).З.Ы. портативное в смысле Portable Executable.
Слышал что в тренде теперь Ruby и он тоже может в CV :)
но даже не читал что он такое.

Добавлено спустя 32 минуты 49 секунд:
olegy123 писал(а):Посмотрите и разберите примеры - они короткие и понятны будут даже школьнику 7 класса


Понятно будет только то что подаем картинку и просим,к примеру контуры,а каким образом контуры получены не понятно.
Видя,и зная что за данные и как они получены ими проще оперировать,хотя бы даже в голове :)
Взять к примеру скриншот окна в Виндовс,поскольку каждое окно рисует себя само(приложение).
Мы по факту берём и подменяем device context на наш,заставляя окно отрисоваться на нём.
И вот у нас готовый скрин окна,даже если оно убрано за "экран" или перекрыто другими окнами.(в WinXP работало и со свёрнутыми насколько помню,а в Win10 или раньше оптимизировали и свёрнутое окно не отрисовывает себя совсем).
И прекрасно можно понять как видовс выделяет память,создаёт виртуальную простыню :) и говорит приложению-Это экран рисуй тут :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Pavia » 01.05.2020 10:54:52

IvoX
Рад видеть новичка в наших рядах. Последнюю не делю был на работе, не видел ваших сообщений.

Насколько понял ваша цель. Сделать программу для распознавания. Сразу скажу о своём опыте. Я делал много экспериментов.
Последний месяц вообще ничего не делал толком.
Читал про кросс корреляцию - В основном с неё советуют начать.

Нет смысла начинать. Данная методика не работает.

Начинать надо сразу с нейронных сетей. Точка. Можно начать ещё с леса вероятностных деревьев. (random forest tree)


По поводу FAST выбрал потому что первое что нашел,да и реализация его несравненно проще.
Начинать решил с малого,постепенно вникая и осваиваясь,попутно читая хоть чтото.

FAST то тут причём? FAST это алгоритм поиска углов. Он очень простой.


IvoX писал(а): получше будет.
Про FAST я допустим читал,и понимаю что ищутся углы,и понимаю каким образом это происходит,но формула
Изображение
этого с первого взгляда не объясняет а вот текст объясняет что впринципе делается.

Надо читать оригинальные работы, там понятнее объясняют. ссылка FAST

Идем по изображению скользящим окном читаем по 17=16+1 точек как на картинке
Изображение
Далее бинаризуем адаптивным алгоритмом.
В оригинальной работе такая бинаризация сделана очень сложно. Поэтому на это предлагаю забить.

Короче вот такой вот код у меня отлично работает.

Код: Выделить всё
  // Скользящее окно
  for j:=3 to bmp.Height-4 do
    for i:=3 to bmp.Width-4 do
      begin
      // Выбираем 17 точек
      buf[0]:=Gray(Bmp.GetPixel(i,j));

      buf[1]:=Gray(Bmp.GetPixel(i-1,j-3));
      buf[2]:=Gray(Bmp.GetPixel(i+0,j-3));
      buf[3]:=Gray(Bmp.GetPixel(i+1,j-3));

      buf[4]:=Gray(Bmp.GetPixel(i+2,j-2));

      buf[5]:=Gray(Bmp.GetPixel(i+3,j-1));
      buf[6]:=Gray(Bmp.GetPixel(i+3,j+0));
      buf[7]:=Gray(Bmp.GetPixel(i+3,j+1));

      buf[8]:=Gray(Bmp.GetPixel(i+2,j+2));

      buf[9]:=Gray(Bmp.GetPixel(i+1,j+3));
      buf[10]:=Gray(Bmp.GetPixel(i+0,j+3));
      buf[11]:=Gray(Bmp.GetPixel(i-1,j+3));

      buf[12]:=Gray(Bmp.GetPixel(i-2,j+2));

      buf[13]:=Gray(Bmp.GetPixel(i-3,j+1));
      buf[14]:=Gray(Bmp.GetPixel(i-3,j+0));
      buf[15]:=Gray(Bmp.GetPixel(i-3,j-1));

      buf[16]:=Gray(Bmp.GetPixel(i-2,j-2));
      // Локальная Бинаризация
      // Для неё ищим максимум и минимум. 
      Max:=buf[0]; Min:=buf[0];
      for k:=0 to PointsCount-1 do
        begin
        if buf[k]> max then Max:=buf[k];
        if buf[k]< min then Min:=buf[k];
        end;

      s:=0;
      if Max-Min>8 then      // Порог отсечения аддитивных шумов.
         begin
         s:=(Max+Min) div 2;                          // "Среднее значение"
         for k:=0 to PointsCount-1 do            // Непосредственно локальная бинаризация относительно "среднего значения".
            if buf[k]>s then buf[k]:=255 else buf[k]:=0;
         end else FlagNotCorne:=True;


А после того как вы бинаризовали вы подаёте на дерево решений которое определяет угол это или нет.

Код: Выделить всё
if PointsCount=17 then
  begin
if P[0]<128 then
begin
if P[1]<128 then
begin
if P[2]<128 then
begin
if P[3]<128 then
begin
if P[4]<128 then
begin
if P[5]<128 then
begin
if P[6]<128 then
begin
if P[7]<128 then
begin
if P[8]<128 then
begin
if P[9]<128 then
begin
if P[10]<128 then
begin
if P[11]<128 then
begin
if P[12]<128 then
begin
if P[13]<128 then
begin
if P[14]<128 then
begin
if P[15]<128 then
begin
if P[16]<128 then
begin
begin result:=False; v:=0; end;
end else
begin
begin result:=True; v:=65536; end;
end;
end else
begin
if P[16]<128 then
begin
begin result:=False; v:=32768; end;
end else
begin
begin result:=False; v:=98304; end;
end;
end;
end else
begin
if P[15]<128 then
begin
if P[16]<128 then
begin
begin result:=False; v:=16384; end;
...


Вот это дерево решений получено путем обучения.


Классов у меня 2 штуки.
- угол;
- не угол.
Подклассов получилось 12 штук но их можно сделать больше.

+ 1 Луч
+ 2 Угол из 2- лучей
+ 3 Угол полигона
+ 4 Кресты
+ 5 Песочные часы
- 6 Точки
- 7 Круги
- 8 прямая центрированная
- 9 прямая не центрирования
- 10 Край кляксы
- 11 Текстура - ткань, дерево и тд.
- 12 Сплошная клякса

Генерирую изображения для всех подклассов -ширина и высота 7х7 пикселей . Сразу в бинарном виде. Тут же выбираю по 17 точек и сохраняю только их.

Дерево решений можно строить так,
1. беру образец из подкласса читаю наши 17 точек. Подсчитываю количество черных точек по всем образцам. выбираю максимум делю все множество образцов на две группы там где максимальная точка черная и там где белая. Номер максимальной точки заношу в дерево. Затем проверяют если группа содержит только один класс(только углы или только не углы), то помечаю что эта ветвь дерева конечная. Если это условие не выполняется то повторяю подсчёт пикселей и повторяю разбиение.
2. Правда для FAST я сделал по другому. Точек 17 черные и белые это 17-битовое число. Просто перебираю от 0 до 2^17-1 и смотрю к какому классу это число относится. Для чего сравниваю со всеми шаблонами и подсчитываю каких сравнений больше. Если совпадений больше с углами значит угол, если совпадений больше с не углами или 0, то не угол.
А далее кодирую дерево решений. Просто тупо проверяя все точки по порядку. Т.е. все 2^17 веток.
В оригинальном FAST дерево оптимизировано в плане высоты, но мне это было не нужно.
3. Лучше делать сразу лес деревьев. Он не намного сложнее дерева решений, а возможно и проще. Но суть в том что он более устойчивый и быстрее обучается чем случайное дерево.

"Каскады Хаара"

Каскады Хара плохо работают потому что это единичное дерево решений. Единичное дерево хорошо работают только для углов. Для букв если долго мучать и при наличии большой удачи может получиться. Для того что-бы улучшить нужно кодировать лес-деревьев либо нейронные сети.

Вот тут наглядно можно посмотреть почему Лес лучше Дерева. Поставьте количество деревьев ползунком в 1 и добавьте точки (в режиме hard assignment лучше видно).
https://cs.stanford.edu/~karpathy/svmjs/demo/demoforest.html
Так же хорошо работают нейронные сети и SVM.

Код на JS -написан очень качественно и понятно. А самое главное похож на Pascal. Поэтому легко портируется. Я уже несколько кодов перевёл.

Если что кому нужно пишите. Буду выкладывать.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Исследовательский проект "Цифровая оптика" .

Сообщение IvoX » 01.05.2020 11:55:18

Pavia писал(а):Рад видеть новичка в наших рядах. Последнюю не делю был на работе, не видел ваших сообщений.

Я ваши сообщения часто встречал в смежных и не очень темах,практически на всех форумах.
Рад так сказать знакомству :)
Pavia писал(а):Надо читать оригинальные работы, там понятнее объясняют

Спасибо,почитаю.Это видимо как раз то , что я искал.
Pavia писал(а): buf[1]:=Gray(Bmp.GetPixel(i-1,j-3));

ГетПиксель? он же медленный как Pixels[x,y] ,точнее это Pixels без обёртки.(Или в FreePascal быстрее чем в Дельфи?).

Хотя сходу не предложу как лучше(по моему субъективному мнению),я опять не спал всю ночь.
Я вычитываю цвета в двумерный массив...руки не дошли ещё сравнить скорость при работе напрямую через ScanLine И с массивом цветов.
На уровне домыслов:Будет тратится время на копирование цветов в массив при использовании массива.(каждый кадр).
Быстрее ли доступ к элементам массива чем Scanline неизвестно.С массивом будет удобнее сделать доступ к пикселам как в вашем примере,очень наглядно и понятно

С другой стороны...Вызвав сканлайн -3 по Y координате и +3 мы получим значения цветов до смены строки ,и
Кажется мне пора спать,трудно соображать стало.В любом случае нужен массив(пусть и в 7 *Width размерами) чтобы не дергать сканлайн часто.

Добавлено спустя 10 минут 25 секунд:
Подумал немного,получается в этом конкретном случае не будет выигрыша в скорости.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

Re: Исследовательский проект "Цифровая оптика" .

Сообщение debi12345 » 01.05.2020 12:32:36

Конено же нейросети. Визуальные объекты же случайные - как их все можно формализовать какими-либо алгоритмами ? Вероятности (весовые коэффициенты) - не более того.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Исследовательский проект "Цифровая оптика" .

Сообщение Pavia » 01.05.2020 12:52:32

ГетПиксель? он же медленный как Pixels[x,y] ,точнее это Pixels без обёртки.(Или в FreePascal быстрее чем в Дельфи?).

В оригинальном FAST идёт работа непосредственно с памятью. У меня своя обёртка над памятью в виде GetPixel с приемлемой скоростью 22-80 тактов на пиксель. В данном примере я ставил эксперименты по обучению, а не на оптимизацию.

.руки не дошли ещё сравнить скорость при работе напрямую через ScanLine И с массивом цветов.

В Delphi 7 насколько помню ScanLine - это 1000 тактов. У меня он свой, сделан в виде массивом это 9 тактов или около того. Во FreePascale насколько помню он тоже через массив сделан.

Подумал немного,получается в этом конкретном случае не будет выигрыша в скорости.

Лично я не сторонник вылизывать скорость на 100%. Однако в данном случае смысл сделать есть будет 2-3 раза быстрее.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Пред.След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru