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

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

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

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

Сообщение Alex2013 » 07.09.2017 16:23:04

Текущая сборка "Подзорной трубы"...

:arrow: Truba_DS_0_0059_8.7z :idea:

ИзображениеИзображение
(Уф замахался делать скриншот (Фокус в том что я его из под Wine делал, а там что-то временами кадр переворачивает вверх ногами ) )


В окно "слежении за объектами" добавил Галку MBlur и движок управления к ней ...

Что это такое догадаться несложно обычный motion blur или "Темпоральный след " .
Я заметил что даже в полностью неподвижном кадре после поисков контуров картинка слишком "плывет".
ТС по идее должен "собирать статистику" делая неподвижное изображение более неподвижным .
Кое что получается но вот беда сильно до не разборчивости объектов размазывает любое движение .

Нужно сделать "хитрое" сложение кадров где движущийся объект смог бы рисоваться первым . :idea:
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 » 09.09.2017 00:36:06

Дело движется !

:arrow: Truba_DS_0_0059_9.7z :idea:
Обнаружил и прикрутил к программе некую "не известной породы" Бинаризацию
Пока лучший результат из всех опробованных фильтров !
(Фильтр Канни красив но почти бесполезен применяя "Скелетизацию" нужно еще долго возится вникая в ее возможности и тд )

Но применяя новую Бинаризацию вместе с "заслуженным гасителем звезд" MBlur и Emboss уже почти можно "грабить корованы" !

Правда неясно что ставится на входе (первый числовой параметр явно нижний порог(правда тоже "хитрый" ) а вот второй как-то связан с "радиусом адаптивности" но что это такое на самом деле не вполне понятно )

+Включил ранее опробованный поиск линий и контуров на базе OpenCv.
(Галки FContur и FLine) как и все OpenCv отдает неким гм... хаосом что-ли?

Кто не понял разъясняю :
Скрин 1 тут без всяких контурных фильтров изображение доведено до уровня
когда можно применять "поиск контуров" из моего старого проекта (Разумеется оптимизировав процесс )

ИзображениеИзображение

Скрин 2 Поиск контуров через OpenCV (Как использовать результат пока не очень ясно )
ИзображениеИзображение

Скрин 3 Поиск линий через OpenCV ( каша еще та но вы не вдели что было после фильтрации по Канни ... )
ИзображениеИзображение

Скрин 4 (Ну и что ? Просмотрите следующий скрин ! )
ИзображениеИзображение

Скрин 4 ( Вот теперь все ясно ! Буквы на предыдущем скрине (так же как и на этом ) были полностью переработаны, то есть это уже почти настоящая ДР ! )
ИзображениеИзображение
ЗЫ
Загадочная бинаризация!
Главное в отличии от РАБОТАЕТ !
Но интересно, что это за метод ?
Код: Выделить всё
// Binarization неизвестного происхождения ...
procedure bBinarization(var  bBitmap,OutB:TBitmap;Min,Max:Integer);
var
  iX1, iY1,
  iX2, iY2,
  ii, jj,
  s, s2,
  iSum, iCount,  index,
  iHeight, iWidth : Integer;
  iSize: Integer;

  row : ^TRGBTriple;
  black : TRGBTriple;
  aIntegralIm: array  of Integer;
  aGrays : array of Byte;

  startTime : Cardinal;
  bBitmap2:TBitmap;
begin
  iWidth := bBitmap.Width;
  iHeight := bBitmap.Height;
  iSize := iWidth * iHeight;

  SetLength(aGrays, iSize);
  SetLength(aIntegralIm, iSize);

  black.rgbtRed  := (clBlack and $0000FF);
  black.rgbtGreen := (clBlack and $00FF00) shr 8;
  black.rgbtBlue := (clBlack and $FF0000) shr 16;
  bBitmap2:=TBitmap.Create;
  bBitmap2.Canvas.Brush.Color := clWhite;
  bBitmap2.SetSize(bBitmap.Width,bBitmap.Height);
  bBitmap2.Canvas.FillRect(Rect(0, 0, bBitmap2.Width, bBitmap2.Height));
  if max<1 Then Max:=1;
  s := Round(iWidth /Max);
    s2 := Round(s / 2);

  startTime := GetTickCount();

  index := 0;

  for ii := 0 to iHeight - 1 do begin
     row := bBitmap.ScanLine[ii];
     for jj := 0 to iWidth - 1 do begin
       aGrays[index] := ((row.rgbtRed * 77 + row.rgbtGreen * 150 + row.rgbtBlue * 29) shr 8);
       inc(index);
       inc(row);
     end;
  end;


  for ii := 0 to iWidth - 1 do begin
     iSum := 0;
     for jj := 0 to iHeight - 1 do begin
       index := jj*iWidth+ii;
       iSum := iSum + aGrays[index];
       if ii = 0 then aIntegralIm[index] := iSum
       else aIntegralIm[index] := aIntegralIm[index - 1] + iSum;
     end;
  end;


  for jj := 0 to iHeight - 1 do begin
     bBitmap2.BeginUpdate(False);
     row := bBitmap2.ScanLine[jj];
     for ii := 0 to iWidth - 1 do begin

       index := jj*iWidth+ii;

       iX1 := ii-s2;
       iX2 := ii+s2;
       iY1 := jj-s2;
       iY2 := jj+s2;

       if (iX1 < 0) then iX1 := 0;
         if (iX2 >= iWidth) then  iX2 := iWidth-1;
           if (iY1 < 0) then  iY1 := 0;
             if (iY2 >= iHeight) then  iY2 := iHeight-1;

       iCount := (iX2 - iX1) * (iY2 - iY1);

       iSum := aIntegralIm[iY2*iWidth+iX2]
              - aIntegralIm[iY1*iWidth+iX2]
              - aIntegralIm[iY2*iWidth+iX1]
              + aIntegralIm[iY1*iWidth+iX1];

       if (aGrays[index] * iCount) < (iSum * (100 - Min) / 100) then  row^ :=  black;

       inc(row);

     end;
   bBitmap2.endUpdate(False);
  end;

  //ePath.Text :=  'Time: ' + inttostr(GetTickCount() - startTime) + ' ms';
  OutB.Canvas.Draw(0,0,bBitmap2);
  bBitmap2.Free;
end;
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 » 11.09.2017 18:20:56

Продолжение банкета ! (Приближение приближается ! ) До достижения светлой цели распознавания ДР-меток осталось совсем немного !
:arrow: Truba_DS_0_0059_10.7z :idea:

ИзображениеИзображение

Тут поймал идущий процесс поиска (видна иконка- индикатор )
ИзображениеИзображение

Тут добавлен мой пока не очень точный метод поиска контуров .
ИзображениеИзображение

Для сравнения тоже изображение с рекурсивным поиском ...
ИзображениеИзображение

Truba_DS_0_0059_10. (Выдержка из readmy.... )
Уф, два дня "повисания" в процессе глубокой отладки ..
(Ну бывает... кажется вот вот "и дрогнут шведы"... ага ... вздрогнул...
бедный Ёрик… то бишь мой ну очень дальний предок из славного шведского рода Норманов в гробу перевернулся.. )

Короче, в муках прикрутил аж два своих метода распознавания контуров (не путать с контурными фильтрами ) ..
И сподобился даже многопоточность к этому делу присобачить..
Все бы хорошо да один метод рекурсивный и явно есть проблемы с переполнением стека
Что делать ? Написал свой но выясняется что проблема только отчасти связана с рекурсией ...
Есть явная и не понятная ошибка при обработке изображений с нормальным разрешением.
Камера снимает в разрешении 640Х480 но даже при уменьшении в два раза есть явные проблемы (обработка не доходит до конца кадра
что вызывает какие-то дикие ассоциации с "ручным управлением" видео адаптером в МСДОС в режиме EGA)
Так что работает только с очень сильным "Упрощением по разрешению" то бишь в 3, 4 и более раз ..
Метод с рекурсией может глючить при больших черных объектах тормозить при большом количестве мелких точек ...
Мой метод работает значительно быстрее и не виснет но результаты есть только "в тепличных" условиях
(Пару простых контуров может распознать более менее точно но результат нестабилен )...

Мда чтобы описать, что и как работает, скоро нужно будет писать несколько страниц инструкций …
И так в окно «слежение за объектами» добавил кнопку “RR” галку “RRV” и «MSOBJ»
Всё это «богатство» работает при включенном «Упрощении разрешения» начиная 3 раз и «Пороге бинаризации» с подбором уровня двумя движками в правом верхнем углу окна.
Галка “RRV” включат и выключает(выключает с очисткой) просмотр найденных контуров .
Галка «MSOBJ» включает не рекурсивный метод поиска
(Более быстрый и более надежный, но пока неточный)
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 » 14.09.2017 16:26:46

Банзай товарищи ! :idea: :D
:arrow: Truba_DS_0_0059_11_2.7z :idea:

ИзображениеИзображение

"Какой-же день там был тогда... ах да среда! " :) Да я знаю что сегодня уже четверг ... но куда я среду посеял ?
А вот сюда ! :lol:
Версия Truba_DS_0_0059_11_2.
В общем начал я прикручивать распознавание меток
(в отличии от предыдущего захода в тему "Дополнение к реальности" в реальном времени )
Не шатко не валко что-то даже работнет (иногда… )
В промежуточной сборке был еще поиск метки повернутой под углом но в том виде от него проку мало .
(Только демонстрация процесса красивая )

И так в "слежение за объектами" опять добавил новую галку "Панель распознавания метки" которая как нетрудно понят включает ее показ.
Там есть выбор масштаба для загаженной метки , показ метки , кнопка «новая метка» и галка "Включить распознавание".
Кроме того, выводится инфа о найденной метке (Пока ищет только одну)
Цифры
1 Номер контура в списке ...
2 Уровень шума в %. (Меньше лучше )
3 Совпадение с меткой в %.. (Больше лучше)
4 Должен быть угол поворота но пока просто случайное число единственная польза которого в том что видно что поиск идет на каждом
кадре, а не повис ..


Что бы увидеть действие предварительной версии распознавания метки нужно:
1 Выставить пороги бинаризации
2 Найти контуры (Кнопка "RR")
3 Включить "Панель распознавания метки"
4 Поставить галку "Включить распознавание" ..
"По вкусу" можно включить MBlur и второй порог, а также настроить "упрощение по разрешению".
Все прочее на уровне работает на уровне "проиграться с фильтрами" и особого смысла для данного метода поиска метки не имеет..

Вот например цифровая зарисовка на тему "Трофейный процессор арабского терминатора " ... 8) :lol:
Бесполезно но красиво ! :roll: (Вам тут невидно, а у меня еще все шевелилось и загадочные символы "арабской вязью" ползли ... типа "телеметрия" ! )
ИзображениеИзображение

Метод поиска меток пока сильно чувствителен к искажениям и повороту…
Но в принципе понятно, что с этим делать.
Еще где-то есть сбои с перезапуском поиска и найденная метка «зависает» не смотря на обновление списка контуров …
(Пока помогает только перезапуск программы )
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 » 17.09.2017 22:50:29

:arrow: Truba_DS_0_0059_11_5.7z :idea:

Ай.. Ай... Кеп ! вас узнали ... :D
ИзображениеИзображение

"Черная звезда"... ужос звездоплавателей !
ИзображениеИзображение

Лучший кадр !
ИзображениеИзображение

Truba_DS_0_0059_11_5.
"Ух понастроено, прямо так и понастроено! "(с)Дерёвня :D
Изменения? мдя.. Проще сказать, что не изменилось!
Ну ладно кратко ...
1 Главное добавил полуавтоматический режим поиска контуров ... (Галка "FRR" ).
2 Вращение работает быстрее но все равно тормоз ! (Для ручного режима (поиск контуров кнопкой RR) более мнение )
3 Куча новых настроек в "Панели распознавания метки"
4 Режим наблюдения .(полезен для подкручивания порогов распознавания )

В общем, все постепенно упростился, а пока 'жуткие навороты'...

Но наконец можно двигать метку (пока не особенно в широких границах и параллельно камере ) и программа САМА следит за ней ...
(Гоняя распознавание, раз в заданное число кадров.. меньше 3 ставить, не рекомендую!)

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

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

Зы
Итак программа "увидела свою тень" ! Полный оборот в спирали развития проекта завершен !
Функционал из предыдущего проекта полностью воспроизведен на качественно новом уровне .
Зы Зы
Если бездумно клацаць галками (особенно RRV при включенном распознавании ) возможен вылет из программы или провисание смены кадров в окне ...
Но для "лабораторного монстрика" это прямо таки верх стабильности . :idea:
(Разумеется в дальнейшем постараюсь "выправить мозги" и в этой мелочи )

Добавлено спустя 19 часов 30 минут 54 секунды:

:arrow: Truba_DS_0_0059_12.7z :idea:

ИзображениеИзображение

ИзображениеИзображение

Truba_DS_0_0059_12.
"Понедельник начался вовремя..."
Сегодня "работа над ошибками" и
Панель создания метки (галка Создание метки)
(Перед использованием включайте Порог Бинаризации!)
На панели кнопки сохранения и прямого использования, метки для поиска.
+ галка "Режим захвата метки"(включив которую, можно мышкой прямо из текущего кадра выбрать нужный блок изображения.)
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 » 21.09.2017 22:11:26

Ау Сонное царство ... а я тут новую в сборку сделал ... (и даже не одну но не все сразу! )

:arrow: Truba_DS_0_0059_12_1.7z :idea:


Truba_DS_0_0059_12_1.
Возился много, а результат так себе ...
Хотя это как поглядеть !
Код распознавания метки стал значительно стабильнее .
Выбросил (точнее переписал) совершенно дикий кусок с вращением и заполнением списка повернутых меток .
Нет, логика там какая-то была ...
Но даже компилятор похоже не смог однозначно транслировать это "байто- раздирающие зрелище" в нормальный машинный код...
+ ещё разные мелкие правки .

Фильтры в помощь ! (Код стал стабильнее теперь можно поэкспериментировать . )
ИзображениеИзображение

Я крут ! ОpenCV не обнаружил контур а мой метод нашел!
ИзображениеИзображение
Что явно напрашивается по результатам испытаний:
1 Для реального применяя нужно хоть как то решить проблему проективных искажений метки...
2 Оптимизировать все что только можно особенно вращение и поиск контуров
Alex2013
энтузиаст
 
Сообщения: 663
Зарегистрирован: 03.04.2013 11:59:44

Пред.

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

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

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

Рейтинг@Mail.ru