Truba_DS_0_0058_5.7zTruba_DS_0_0058_4.
1 Галка FRob Тест фильтра Робертса (В окне "Супер зум" /только просмотр /  ) ...


"Было темно ..." Подпороговая мряка правит бал  ...   
 Truba_DS_0_0058_5.
2 Управляемый порог для фильтра Робертcа  [Движок под кнопкой "Захват кадров" ]
3 Галка MF Чистка мусора для фильтра Робертcа.
"Вот кто-то зашел на порог незнакомый ..." 
 



Зы
Можно было пробовать  фильтр Собела ... но он чуть  сложнее и  вроде как дает боле тонкие(как выясняется на практике  более толстые ... 

  ) линии при  "трассировке" так что ФС тоже  будет но чуть   позже...
- Код: Выделить всё
 //Фильтр  Робертса + Порог + Чистка 
procedure Roberts(var Clip: TBitmap;Porog:Integer);
Type
  BA=Array[0..1]of byte;
var P0,P1,P2,P21:^BA;
    X,Y,V,U,C,CC: integer;
    BB:TBitmap;
begin
     BB:=TBitmap.Create;
     bb.PixelFormat:=pf24bit;
     bb.SetSize(Clip.Width,Clip.Height);
  for Y:=1 to BB.Height-1 do
    begin
      P1:=Clip.ScanLine[Y-1];
      P0:=Clip.ScanLine[Y];
      BB.BeginUpdate(False);
      P2:=BB.ScanLine[Y];
      P21:=BB.ScanLine[Y-1];
  for X:=0 to Pred(BB.Width-2) do begin
       for C:=0 to 2 do
        begin
          U:=P0[(x*3)+C]-P1[((x+1)*3)+C];
          V:=P1[(x*3)+C]-P0[(x+1)*3+C];
          P2[(x*3)+c]:=Trunc(Sqrt(Sqr(U)+SQR(V)));
//Порог (четыре уровня  )....
          CC:=0;
       IF P2[(x*3)+C] >Porog then CC:=255 else
       IF P2[(x*3)+C] >Porog div 2 then CC:=125 else
       IF P2[(x*3)+C] >Porog div 3 then CC:=85 else
       IF P2[(x*3)+C] >Porog div 4 then begin CC:=62;
// Ловушка для одиночных пикселей  
   if self.CheckBox4.Checked then
   if Not ((X>0) and ((P2[((x-1)*3)+C]
                      +P2[((x+1)*3)+C]
                      +P21[((x-1)*3)+C]
                      +P21[(x*3)+C]
                      +P21[((x+1)*3)+C]) div 5 > Porog div 4))then
                 CC:=0;
         end
     end;
     if (cc<>0) then    for C:=0 to 2 do P2[(x*3)+c]:=CC;
    end;
      BB.EndUpdate(False);
    end;
    Clip.Free;Clip:=bb;
end;
Код нуждается в оптимизации но работает ...
ЗЫ 
Извиняюсь за не внимательность ... Разуметься это фильтры  Робертса и Собела .. 
Добавлено спустя 23 часа 22 минуты 1 секунду:Кстати вот и он Фильтр  Собела...
(Надежд не оправдал да ярче но кривее, толще и мусорней  ) 
... или все-же где-то я сам  ляп пропустил  
  
 - Код: Выделить всё
 //Фильтр  Собела + Порог
procedure Sobel(var Clip: TBitmap;Porog:Integer);
Type
  BA=Array[0..1]of byte;
var P0,P1,P02,P2,P21:^BA;
    X,Y,V,U,C,CC: integer;
    BB:TBitmap;
begin
     BB:=TBitmap.Create;
     bb.PixelFormat:=pf24bit;
     bb.SetSize(Clip.Width,Clip.Height);
  for Y:=1 to BB.Height-2 do
    begin
      P1:=Clip.ScanLine[Y-1];
      P0:=Clip.ScanLine[Y];
      P02:=Clip.ScanLine[Y+1];
      BB.BeginUpdate(False);
      P2:=BB.ScanLine[Y];
     P21:=BB.ScanLine[Y-1];
  for X:=1 to BB.Width-2 do begin
       for C:=0 to 2 do
        begin
          U:= (P02[((x-1)*3)+C]+2*P02[(x*3)+C]+P02[((x+1)*3)+C])
              -(P1[((x-1)*3)+C]+2*P1[(x*3)+C]+P1[((x+1)*3)+C]);
          V:= (P1[((x-1)*3)+C]+2*P0[((x-1)*3)+C]+P02[((x-1)*3)+C])
             -(P1[((x+1)*3)+C]+2*P0[((x+1)*3)+C]+P02[((x+1)*3)+C]);
          P2[(x*3)+c]:=ABS(U)+ABS(V);
         // Trunc(Sqrt(Sqr(U)+SQR(V)));
        CC:=0;
//Управляемый порог фильтра
       IF P2[(x*3)+C] >Porog then CC:=255 else
       IF P2[(x*3)+C] >Porog div 2 then CC:=125 else
       IF P2[(x*3)+C] >Porog div 3 then CC:=85 else
       IF P2[(x*3)+C] >Porog div 4 then begin CC:=62;
// Ловушка для одиночных пикселей  
   if self.CheckBox4.Checked then
   if Not ((X>0) and ((P2[((x-1)*3)+C]
                      +P2[((x+1)*3)+C]
                      +P21[((x-1)*3)+C]
                      +P21[(x*3)+C]
                      +P21[((x+1)*3)+C]) div 5 > Porog div 4))then begin
                      CC:=0;
               end
         end ;
     end;
     if (cc<>0) then  for C:=0 to 2 do P2[(x*3)+c]:=CC;
    end;
      BB.EndUpdate(False);
    end;
    Clip.Free;Clip:=bb;
end;
Добавлено спустя 21 час 53 минуты 49 секунд:
Детектор Канни (исходники на дельфи) обнаружен...
Сконвертирован в Лазарус (Если кто-то думает что там все делает автомат .. пусть он  так не думает !   
 )...
Исправлен ( ....интересно код там вообще рабочий был?    
 ) ...
Модифицирован (Цветное сглаживание и вообще более нормальная работа в RGB режиме  )...



 
 Detection_contour_Canny02.7z 
 Теперь еще нужно научится применять его на практике ...   
Добавлено спустя 20 часов 23 минуты 13 секунд:И так задумался я начнем бы мене простом потренироваться  в использовании всей это бездны премудрости и могущества...
Напрашивается старая идея-фикс распознавание маркеров (и что важнее  их положения в пространстве ) для дополненной реальности   . 
Вооружившись в качестве  дорожной карты  
 ЭТОЙ статьей .
Начал думать что мне взять за ПРОСТЕЙШИЙ маркер ?  ...и тут с верхней полки на меня упал ОН ! Кубик Рубика ! ... народ эврика !!!! 
 

Так что  задача проста : определить координаты хотя-бы одной грани и нарисовать "виртуальный кубик" поверх реального  !  
Вообще хорошо-бы повторить "подвиг програмера " и сделать AR-Мастер  сборки кубика ..

Но это сильно побочный квест ...
Отсюда вопрос : Что лучше  использовать  как образец ? Черную или белую табличку 3Х3 , набор квадратиков или просто отдельные квадратики (а кубик целиком определять по  их положению относительно друг друга )
Зы
Интересно это только мне кажется что нынешние поделки в области АР ну просто 
дико тупые ?
Ведь  и ежу понятно, что определив положение в пространстве даже всего одной метки можно развернуть целый виртуальный "рабочий стол" (Точнее рабочий ОБЪЕМ ) А качестве триди устройства устройства визуализация вполне может хватить обычного монитора   аниглиф очков (или затворных )  и "вывернутой   перспективы" (Это когда кажется что изображение висит перед экраном )...
В моем случае я думаю юзать простую связку из веб-сервера, смартфона и "кастрюли стереовизора "  

Данные с камеры сартфона на обработку  можно получать например вот так 
https://play.google.com/store/apps/deta ... bcam&hl=ruВзаимодействие с ДР можно сделать не менее  простым ... 
1 "3д курсор" 
2 или воспользовавшись чем-то вроде от этого с позволения сказать "девайса" ...


(Карандаш+ прищепка  +какой-нибудь маркер  )
Зы Зы
Ух разошелся я однако ... теперь в дело за "малым" написать что-то рабочие ...   
  
 ... и чувствую что почти "дозрел" до разборок с жутким  и тяжелым (как мне казалось еще недавно OpenCV )  ...  
