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

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

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

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

Сообщение debi12345 » 03.05.2020 11:47:04

Ага, сейчас в этой теме складывается правильная ситуация - алгоритмами ИИ занимаются большие команды алгоритмистов и создателей моделей, а прочие, уже без изобретения собственных "велосипедов", могут сразу, используя открытые наработки, заниматься практическими "вещами" :roll:

Добавлено спустя 12 часов 4 минуты 30 секунд:
Встречайте героев нашего времени! Вот кто резко двинул вперед тему аккумуляторов - ИИ, для которого одну умная американка китайской национальности придумала экспериментально генерировать датасеты, по которым ИИ смог предсказывать новые материалы и их комбинации без необходимости долгих (10-летия!) проб и ошибок :
Shirley Meng - Maxwell Research Partner and Battery Nano-Engineer

https://youtu.be/oD80O5Eb2Lc?list=PLyvd ... Z_hlOQT9rs
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Alex2013 » 06.05.2020 15:11:27

Вообще самое интересное, что сейчас можно сделать помощью нейросети это существенно упросить анализ сигалов от нейро интерфейса . И сделать это по идее можно без всякого черепномозгового нейро-линка достаточно получить доступ к любому нервному узлу например на руке .

Суть трюка нужного для "прямого ввода данных в ЦНС" в том что среда любых нейросетей в принципе однородная, что означает, что если глаз вследствие случайной мутации вырастит на ладони, то им вполне можно будет видеть . Тоже самое (по идее ) возможно получить и искусственным путем, имплантировав в ладонь подключение к нейрочипу подключенному к видеокамере спрятанной например в очках . В процессе обучения изображения с камеры будут синхронизированы с обычным полем зрения и "Ура!" да здравствует виртуальный экран от корпорации "Третий газ" ! :idea:

Обратная связь может быть получена похожим образом ведь, по идее пусть и слабо но любая активность любого нейрона отражается на всей ЦНС, а не только на "приемнике целевого сигнала"(никаких "гальванических развязок" в ЦНС нет что кстати здорово мешает паралитикам вроде меня... :idea: ) . Ага те самые "подпороговые чувства"! И все что нужно для создания управляющего нейроинтерфейс ( например вместо мыши ) это детектировать сигнатуру активности конкретной группы нейрон при работе с обычной мышкой в режиме "сверхвысокой чувствительности" то есть когда мышь вначале почти не двигается по столу, а потом и вовсе стоит на месте (то есть получается то самое "управление намерением" ).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение debi12345 » 06.05.2020 22:03:23

но любая активность любого нейрона отражается на всей ЦНС, а не только на "приемнике целевого сигнала"(никаких "гальванических развязок" в ЦНС

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

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

Сообщение Alex2013 » 07.05.2020 00:21:51

Разумеется иначе бы сигналы не доходили бы до адресата совсем ... но часть под пороговых сигналов бродит всей ЦНС . Что такое "мигрень от магнитных бурь" как не внешние наводки, а всяческая синестезия и прочий шум в ушах внутреннее?
(у меня вообще при резком кручении башкой с детства в ушах есть эдакий "высокочастотный электрический фон"(не знаю общие ли это или индивидуальное ), а стоит резко встать и глазах иногда натурально "снежит" (это понятно когда кровь от головы отливает у всех "темнеет в глазах") но сомневаюсь, что при этом у всех бывает эдакое плавное снижение помех и "пиксиляции" - точнее эффект радиальных аналоговых помех довольно плавно восстанавливающий поле зрения "из шума" от центра к краям . )

То есть ЦНС частично вдет себя как старая разветвленная сеть с топологией звезда , но с ветками на "коаксиальных кабелях" так что часть сигнала идет прямо по адресату, а часть бродит по всей сети. (и кстати в цнс видимо есть аналог сетевых маркеров, адресов и роутинга потому как сильно сомневаюсь, что каждая мышца или рецептор подключены к мозгу отдельным изолированным нервом (узлы "разветвители" от "магистральных каналов" и резервные альтернативные линии точно есть) )
Последний раз редактировалось Alex2013 12.05.2020 11:34:59, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение IvoX » 07.05.2020 04:20:45

Alex2013 писал(а):и кстати в цнс видимо есть аналог сетевых маркеров, адресов и роутинга потому как сильно сомневаюсь, что каждая мышца или рецептор подключены к мозгу отдельным изолированным нервом


Топ догадка!
Никогда не задумывался раньше,Но сейчас мне кажется что есть как-бы несколько(скорее всего много)
маленьких подсетей со своими "маршрутизаторами" конечные точки которых и подключены "отдельным изолированным нервом" к мышцам или "сенсорам",
А на сам роутер идёт только один "провод".
Ну и стоит учесть ещё сервисную подсеть к которой у нас нет доступа,плюс автономные системы регуляции(у человека парализованного ниже шеи продолжает работать сердце,и органы).
В некоторых случаях когда требуется быстрая реакция, как раз местный маршрутизатор берёт на себя функцию частичного управления пока сигнал еще только идет к мозгу.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

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

Сообщение Alex2013 » 07.05.2020 14:01:19

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

Но я веду к тому, что стоит людям расшифровать свою систему "внутренней адресации" и по идее можно будет подключить к ЦНС любую внешнюю периферию "напрямую", к любому нервному узлу с достаточно "толстым каналом" (Разумеется понадобится адаптация и обучение но это точно безопаснее чем лезть "кривыми имплантами в мозг", но круче и эффективнее чем ловить всяческую мелкую микромоторику,кожную проводимость , снимать ЭГК и т.п. по методу "черного ящика". )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение olegy123 » 09.05.2020 15:09:36

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

"бессознательное" имеет право выключать сознание, в экстремальных ситуациях брать штурвал на себя.

Кстати, усилинной тренировкой занимаются наркоманы - там "бессознательное" начинает их угнетать. Они называют это "борьба с собой". Когда сознание уже не хочет получать удовольствие, а "бессознательное" всегда готово вмазаться полюбому.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение IvoX » 28.05.2020 18:19:29

Может есть у кого реализация Floodfill на Делфи?
Или внятное объяснение что делает этот код
Код: Выделить всё
void floodFillScanlineStack(int x, int y, int newColor, int oldColor)
{
  if(oldColor == newColor) return;

  int x1;
  bool spanAbove, spanBelow;

  std::vector<int> stack;
  push(stack, x, y);
  while(pop(stack, x, y))
  {
    x1 = x;
    while(x1 >= 0 && screenBuffer[y * w + x1] == oldColor) x1--;
    x1++;
    spanAbove = spanBelow = 0;
    while(x1 < w && screenBuffer[y * w + x1] == oldColor)
    {
      screenBuffer[y * w + x1] = newColor;
      if(!spanAbove && y > 0 && screenBuffer[(y - 1) * w + x1] == oldColor)
      {
        push(stack, x1, y - 1);
        spanAbove = 1;
      }
      else if(spanAbove && y > 0 && screenBuffer[(y - 1) * w + x1] != oldColor)
      {
        spanAbove = 0;
      }
      if(!spanBelow && y < h - 1 && screenBuffer[(y + 1) * w + x1] == oldColor)
      {
        push(stack, x1, y + 1);
        spanBelow = 1;
      }
      else if(spanBelow && y < h - 1 && screenBuffer[(y + 1) * w + x1] != oldColor)
      {
        spanBelow = 0;
      }
      x1++;
    }
  }
}

В Ц++ не разбираюсь
Мои реализации старые и медленные попиксельные...и стек переполняют.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

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

Сообщение Alex2013 » 29.05.2020 02:19:16

Закраска ? В таком виде применятся редко, а вообще обычная рекурсия только реализованная через стек . Я похожим образом замкнутые контуры ищу.

ИзображениеИзображение
Последний раз редактировалось Alex2013 29.05.2020 13:06:10, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение IvoX » 29.05.2020 02:25:04

Мне оно надо для тестов заливки в памяти :)
Как лучше объяснить...
Сегментация ,фон я четко отделяю обычным затиранием
Код: Выделить всё
procedure MaskMe(var b:TBitmap;R1,G1,B1:Byte; MDL:Integer;CLR:integer);
var i,j:Integer;
  P2: PVRGB;   RV,BV,GV:Byte;
begin
  DeltaPix(CLR,RV,GV,BV);
      for j := 0 to b.Height-1 do
        begin
        P2 := b.ScanLine[j];
        for i := 0 to b.Width-1 do                   
         begin
if((P2[i].G>=G1-MDL)and(P2[i].G<=G1+MDL))and((P2[i].R>=R1-MDL)and(P2[i].R<=R1+MDL))and((P2[i].B>=B1-MDL)and(P2[i].B<=B1+MDL))then
           begin
             P2[i].G:=Gv;
             P2[i].R:=Rv;
             P2[i].B:=Bv;
           end else
           begin
             P2[i].G:=255;
             P2[i].R:=255;
             P2[i].B:=255;
           end
        end;
end;
end;
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

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

Сообщение Alex2013 » 29.05.2020 02:34:47

Извиняюсь а бинаризацию используете ? Сори, засыпаю на ходу....
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение IvoX » 29.05.2020 02:37:08

Пока камерой нормальной не обзаведусь...буду пользоваться "идеальной" скриншотствуя экран без шумов
Пока по тестам всё очень быстро и упирается в сам "Вызов и отработку системной функции"
2020-05-29_013237.png


Добавлено спустя 1 минуту 27 секунд:
Alex2013 писал(а):бинаризацию используете


Так этот код и заменяет её,забеляя
Код: Выделить всё
           begin
             P2[i].G:=255;
             P2[i].R:=255;
             P2[i].B:=255;
           end

То что не прошло в условии

Добавлено спустя 10 минут 19 секунд:
2020-05-29_014029.png
2020-05-29_014333.png
Можно подгонять разницу цветов по каждому каналу,но бычно и общей лостаточно.
Вот пример.
Замучился скриншот делать,программа для снятия скринов не успевает нормально отработать когда моё приложение в потоке снимает.

Добавлено спустя 14 минут 19 секунд:
Пришлось ужать,чтобы показать в движении...
444MINI.gif

Собственно на этом и буду тренироваться,начало положено.
Можете предложить или посоветовать как можно отследить движение максимально не нагружно для процессора?
Вычмтанием предыдущего кадра?

Добавлено спустя 47 минут 7 секунд:
Хотя ,даже не так.
В потоке делаю 500 кадров,уже проверил достаточно для анимации 150-350 примерно.Длительность плавает.
Анимация в общем случае не повторяется.Сам "объект" имеет 20 вариантов начально-конечного пути.Другие тоже двигаются по разному вариантов уйма.
Возможны частичные перекрытия -тут пока не придумал как справится с этим. возможно заливка поможет.
И когда кадры получены с максимальной частотой ,поток останавливаю, и можно начинать обсчет каким угодно тяжелым алгоритмом.
Заливка поможет отличить "цель" от мусора на каждом кадре повторяясь.1)-не сделал
Потом Эрозия,дабы уменьшить размеры пересечений. 2) -есть, не использую пока
И вычисление центра масс объекта на каждом кадре. 3) -тоже реализовано но пока неприменимо
4)составление траектории движения по центрам масс на разных кадрах- не сложно сделать
У вас нет необходимых прав для просмотра вложений в этом сообщении.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

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

Сообщение Alex2013 » 29.05.2020 11:35:52

1 Настоящая "адаптивная бинаризация" изрядно сложнее но и полезнее (не уверен что у меня лучшее решение но результат заметно отличается от более простой реализации )
Код: Выделить всё
// Binarization неизвестного происхождения ...
// Min,Max радиусы адаптации видимо можно сделать вычисления оптимального значения автоматическим.
// умолчание например Min=5, Max=15 )
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;
//  bBitmap.PixelFormat:=pf24bit;;
  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;
   //bBitmap2.endUpdate;
  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';
  //bBitmap2.endUpdate(False);
  OutB.Canvas.Draw(0,0,bBitmap2);
  //OutB.Assign(bBitmap2);
  bBitmap2.Free;

end;


2 Веб-камеру для тестов можно: во первых из любого смартфона сделать (подробно описано где-то в этой теме ), во вторых "одолжить" в интернете, в третьих использовать захват окна с почти любого плеера. (Все три способа опробованы на моей "подопытной" программе захват кадров из чужих окон есть в Unit6.pas ) Стянуть кадр из сети вообще проще простого.
Код: Выделить всё
uses httpsend,...
...
function HttpGetBinary2(const URL,Port: string; const Response: TStream): Boolean; //Http Port =80
var
  HTTP: THTTPSend;
  FS:TFileStream ;
begin
begin
  HTTP := THTTPSend.Create;
  try
    cHttpProtocol:=Port;
    Result := HTTP.HTTPMethod('GET', URL);
    if Result then
    begin
      Response.Seek(0, soFromBeginning);
      Response.CopyFrom(HTTP.Document, 0);
    end;
  finally
    HTTP.Free;
  end;
end;
end;

//Загрузка изображений из сети
procedure NetLoadImg(Url,Port:String;var BMP:Tbitmap );
var
Image1:TImage;
s:TMemoryStream;
begin
s:=TMemoryStream.Create;
If HttpGetBinary2(URL,Port, s) then begin
if bmp<>Nil then bmp.Free;
BMP:=Tbitmap.Create;
s.Seek(0, soFromBeginning);
  Image1:=TImage.Create(nil);
  Image1.Picture.LoadFromStream(S);
  bmp.Assign(Image1.Picture.Bitmap);
  Image1.Free;
end ;
s.Free;
end;

3 Отследить движение можно достаточно быстро, но быстрее всего в OpenCV .
Код: Выделить всё
uses  Windows,ipl,OpenCV...

Procedure  MotionDetect( Frame :pIplImage) ;
// Проверка наложения  и близости двух CvRect
// LX,LY - дополнительное расстояние от края областей...

  Function CR(r1,r2 :CvRect;LX,LY:Integer):boolean;
  var RR1,RR2,RR3:TRect;
  begin
   RR1:=Classes.Bounds(r1.x-lx,r1.y-ly,r1.width+lx,r1.height+ly);
   RR2:=Classes.Bounds(r2.x-lx,r2.y-ly,r2.width+lx,r2.height+ly);

  Result:=//RR1.IntersectsWith(rr2);//c версии Лазарус 1.8
  (RR1.Left < RR2.Right) and (RR2.Left < RR1.Right)
  and (RR1.Top < RR2.Bottom) and (RR2.Top < RR1.Bottom);
  end;
// Простое слияние двух CvRect в один
Function SumRecT(r1,r2 :CvRect): CvRect;
begin
With result do begin
X:=Min(r1.x,r2.x);width:=Max(r1.width,r2.width);
Y:=Min(r1.Y,r2.Y); height:=Max(r1.height,r2.height);
end
end;
  Var I,J:Integer;
  PR:PCvRect;
  rect1: CvRect;
  rect2d: CvBox2D;

  storage   : pCvMemStorage;
  cs: CvSize;
    black, white: CvScalar;
  Const
   HSV :pIplImage = nil;
   frame_grey :pIplImage = nil;
   contours: pCvSeq = nil;
   c: pCvSeq = nil;
   difference_img: PIplImage  = nil;
   oldframe_grey : PIplImage  = nil;

   RecList:TList=Nil;
label l1;
  begin
// Инициализация
  if  frame.Width =0 then exit;

Cs.width:=frame.Width;
Cs.height:=frame.Height;
storage    := cvCreateMemStorage(0);

  if  RecList=Nil then RecList:=TList.create;
  if difference_img = nil then
     begin
       frame_grey := cvCreateImage(CS, IPL_DEPTH_8U, 1);
        difference_img := cvCloneImage(frame_grey);
        oldframe_grey  := cvCloneImage(frame_grey);
        //cvConvertScale(frame_grey, oldframe_grey, 1.0, 0.0);;
      end;
//Конверсия и фильтрация
cvCvtColor(frame, frame_grey, CV_RGB2GRAY);

  if  Cs.width <>  oldframe_grey.Width then
   begin
    cvReleaseImage(frame_grey);
    cvConvertScale(frame_grey, oldframe_grey, 1.0, 0.0);;
   end;
cvAbsDiff(oldframe_grey, frame_grey, difference_img);
cvSmooth(difference_img, difference_img, CV_BLUR);
cvThreshold(difference_img, difference_img, 25, 255, CV_THRESH_BINARY);
// Удаляем мелкие объекты
difference_img:= remove_small_objects(difference_img, 100);

// Поиск контуров на карте изменений
contours := AllocMem(SizeOf(CvSeq));
cvFindContours(difference_img, storage, @contours, SizeOf(CvContour),
CV_RETR_LIST,
// CV_RETR_EXTERNAL ,
CV_CHAIN_APPROX_SIMPLE
,  cvPoint_(0, 0));

//Поиск фреймов
white:=CV_RGB(255, 255, 255);
c:=contours;
while (c <> nil) do
       begin
      rect2d := cvMinAreaRect2(c);
      rect1.x:=Round(rect2d.center.x - rect2d.size.width / 2);
      rect1.y:=Round(rect2d.center.Y - rect2d.size.height / 2);
      rect1.width:=Round(rect2d.size.width);
      rect1.height:=Round(rect2d.size.height);
     { // Странно !
      В примере cvBoundingRect работал идеально
       rect1:=cvBoundingRect(c, 0);
       }
        new(pr);
        Pr ^:= Rect1;
        RecList.Add(pr);

        C:=c.h_next;
     end;
// Складываю близкие области ...

if RecList.Count>0 then begin
L1:for  i:=0 to RecList.Count-1 do
for  j:=0 to RecList.Count-1 do
if (I<>J) and  Cr(CvRect(RecList[i]^),CvRect(RecList[j]^),100,50) then
  begin

    CvRect(RecList[i]^):=SumRecT(CvRect(RecList[i]^),CvRect(RecList[j]^));

    Dispose( RecList[j] );  RecList.Delete(j);
   goto l1; // Некрасиво? Зато наглядно!
  end;

// Вывод результатов.
for I:=0 to RecList.Count-1 do begin
  rect1:=CvRect(RecList[i]^);
   cvRectangle(frame, cvPoint_(rect1.x, rect1.y),
    cvPoint_(rect1.x + rect1.width, rect1.y + rect1.height),
     cvScalar_(255, 0, 255, 0), 2, 8, 0);
end;
// Очистка списка .
for I:=0 to RecList.Count-1 do Dispose( RecList[I] ); RecList.Clear;
end;

cvConvertScale(frame_grey, oldframe_grey, 1.0, 0.0);
//чистка
//cvClearMemStorage(storage);
contours := nil;
c        := nil;
FreeMem(contours, SizeOf(CvSeq));
cvReleaseMemStorage(storage);
// cvReleaseImage(frame_grey);
   storage := nil;

  end;

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

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

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

Alex2013 писал(а):1 Настоящая "адаптивная бинаризация" изрядно сложнее но и полезнее

Очень занятный алгоритм,видел его в ваших исходниках :)
Но не тестировал,займусь сегодня.

Я использую эту свою "недобинаризацию" рилтайм,насколько это вообще возможно. -Она не замедляет захват кадров(ну может 3ms на кадр).
Плюс она очень гибкая,можно бинаризовать в любой цвет,можно удалять фон а можно оставить,можно убрать или заменить только часть фона по условию,можно модифицировать цвета фона.
потом вторым проходом искать другие объекты,и третьим :)
Но тут само движение короткое и быстрое.
довольно ощутимый разрыв между положением объектов на соседних кадрах,и если захватывать не максимально быстро,то будет выглядеть так что три пропали,а три другие появились.
А не продолжили движение.
Вообще конкретно к этой задаче мне кажется всё можно упростить чуть ли не в разы.

Добавлено спустя 11 минут 15 секунд:
Известны ведь конечные точки движения-Это 4(максимум) конца траектории,следовательно по одному двум кадрам смотрим угол старта.
их всего 4*4=16 штук но мы знаем за каким объектом следим.
В зависимости от положения на старте прикидываем похожесть стартового угла,и знаем конечную точку сразу.неизвестно правда насколько точно.
IvoX
новенький
 
Сообщения: 75
Зарегистрирован: 15.05.2019 02:45:53

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

Сообщение Pavia » 29.05.2020 19:11:06

Проверяем гипотезу куда сместился объект.
Изображение
Любые фичи можно использовать. В видео ищут самую яркую точку и её смещение или центр масс.
Можно углы или LPB или IoU.

https://www.wikiwand.com/en/Local_binary_patterns
Изображение

IoU и НС YOLO
https://towardsdatascience.com/computer ... beb02a18ba
https://towardsdatascience.com/computer ... b9e67762b1
Поиск максимума.
http://www.compression.ru/dv/course/compr_video.pdf
Углы или LBP точно не помню. Код на Си но алгоретмически оптимизирован МК.
http://wiki.ros.org/tum_ardrone
Гистограммы градиента лежат в основе LBP.
https://www.learnopencv.com/histogram-o ... gradients/

Детекторы движения.
http://delta-course.org/docs/delta7/Day7/Delta7D7L2.pdf
https://web.archive.org/web/20120905061 ... 1984_1.pdf

Лукас-Канаде:
https://pdfs.semanticscholar.org/c439/0 ... 46f1a2.pdf
https://www.cv-foundation.org/openacces ... _paper.pdf
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Пред.След.

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

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

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

Рейтинг@Mail.ru