Цифровая обработка

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

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

Цифровая обработка

Сообщение Pavia » 18.05.2018 07:24:03

Сделал детектор углов по методу FAST.
Пока ещё не завершены исследования. Нехватает препроцессинга. Есть идеи как его лучше сделать?
И как видно артефакты с линиями хотя они в классе "не углы" надо разбираться хотя думаю понятно где надо подкрутить.

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

Посмотреть код
:arrow: https://yadi.sk/d/hHvD1-9Z3W6rAB

Добавлено спустя 3 минуты 35 секунд:
У уточнение по методу Edward Rosten. За основу была взята идея классификации углов и а после классифицировать и сгенерировать код из кучи if. Для классификации использовался датасет, который опять таки был сгенерирован - реализация собственная как что там у Ростена уже не смотрел.

Как и ожидалось артифакты были в генераторе границ клякс.

Код: Выделить всё
procedure GenBlobsEdge(Person:TPerson);
var bp:TBitmap;
Vector1,Vector2:TArrayReal;
i,j,k:Integer;
P0,P1,P2,P3:TPoint;
begin
Person.Text:='Края клякс';
bp:=TBitmap.Create;
bp.Width:=5;
bp.Height:=5;
bp.Canvas.Brush.Style:=bsSolid;
for i:=-36 to 36 do
for j:=-4 to +4 do
  for k:=-4 to +4 do
  begin
  bp.Canvas.Brush.Color:=clWhite;
  bp.canvas.FillRect(bp.Canvas.ClipRect);
  bp.Canvas.Brush.Color:=clBlack;
     P0.X:=+0; P0.Y:=-10;
     P1.X:=10; P1.Y:=-10;
     P2.X:=10; P2.Y:=+10;
     P3.X:=+0; P3.Y:=+10;
     p0:=Rotate(P0,i/36*Pi);
     p1:=Rotate(P1,i/36*Pi);
     p2:=Rotate(P2,i/36*Pi);
     p3:=Rotate(P3,i/36*Pi);
     P0.X:=P0.X+j; P0.Y:=P0.Y+k;
     P1.X:=P1.X+j; P1.Y:=P1.Y+k;
     P2.X:=P2.X+j; P2.Y:=P2.Y+k;
     P3.X:=P3.X+j; P3.Y:=P3.Y+k;
     bp.Canvas.Polygon([P0,P1,P2,P3]);
        Form1.Image1.Canvas.Draw(0,0, bp);
        Form1.Image1.Refresh;
  Vector1:=BitmapToVector(bp);
  Vector2:=NegVector(Vector1);
  Person.NewPhoto.Data:=Vector1;
  Person.NewPhoto.Data:=Vector2;
  end;
bp.Free;
end;


Самое удивительное что в коде для генерации углов углами оказалось только 60% остальные не углы.

Собственно зачем нужен детектор углов? В компьютерном зрении есть 3 вида особых точек углы границы и поля клякс. Чем меньше точек тем быстрее идёт обработка. Один и способов увеличить скорость дальнейших алгоритмов это найти особые точки которых немного.
Углы применяют для создания 3D моделей по серии снимков. Для склейки изображений в панорамы. Для трекинга объектов в кадре. К примеру отслеживания губ и бровей при создания эмоджи.

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

Re: Цифровая обработка

Сообщение serbod » 18.05.2018 11:54:14

https://en.wikipedia.org/wiki/Corner_detection ?

Добавлено спустя 7 минут 38 секунд:
Я не совсем понял вопрос. Нужен алгоритм для визуализации? Ну так просто выделить рамкой или кружком центр обнаруженного угла. Есть еще вариант применить lasso selection на центре угла.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Цифровая обработка

Сообщение Pavia » 18.05.2018 12:51:55

В википедии описан метод Harris'а - он в историческом плане был первым. У меня он уже давно набран. Сейчас я сделал более быстрый метод Rosten'а и по идее он более качественный.

serbod писал(а):Я не совсем понял вопрос. Нужен алгоритм для визуализации?

Интересует форма подачи. Это как подарок упаковать в обёрточную бумагу. Или шутка в середине презентации.
Суть метода в генерации кода. Как-то оформить надо. Может сделать выгрузку найденных точек в таблицу или лучше в Memo?


Ну так просто выделить рамкой или кружком центр обнаруженного угла.

Это не просто. Там в углу несколько пикселей и нужен отбор одного. Плюс у узких полосок углы стоят близко. А если брать естественные изображения то там всё что угодно может быть. Во-вторых эти круги хорошо выглядят только если они широкие и с антилясингом - для примера подключать AGG это чересчур. Вот только точки не всегда заметны так как сливаются. А для выделения обычно ещё и с яркостью играют.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Цифровая обработка

Сообщение serbod » 18.05.2018 13:17:40

Я думаю, тут проблема в слишком малой области обнаружения, когда угол детектится в квадрате из 9 пикселей. Поэтому косые линии без антиальясинга определяются как множество углов. Если взять область побольше, то должно быть меньше ошибок. Можно сперва прогнать FAST, а затем перепроверить найденные углы другим алгоритмом.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Цифровая обработка

Сообщение Pavia » 18.05.2018 17:00:34

serbod писал(а):Я думаю, тут проблема в слишком малой области обнаружения, когда угол детектится в квадрате из 9 пикселей.

Область 5х5 из них берётся 13 пикселей.
serbod писал(а): Поэтому косые линии без антиальясинга определяются как множество углов.

Эта я уже поправил, дело не в области. А в том что исходных данных не было смещения для GenBlobsEdge.
Зато вылезли вертикальные линии. Надо добавить генерацию линии разной толщины. Но тут проблема уперся в нехватку памяти. - де фрагментацию видимо.

Это нормальный процесс отладки 13 точек дают 2^13=8192 варианта. У меня покрытие составляло вчера около 1600 сегодня 2000.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Цифровая обработка

Сообщение Alex2013 » 18.05.2018 23:37:49

Вообще-то не плохо-бы сделать ДР "угломер " Др-"уровень" и ДР -рулетку (Если есть углы рассчитать расстояния думаю не так уж сложно ) https://www.youtube.com/watch?v=4XZC76lQ2hc
(Там правда две камеры но возможно есть варианты как можно получить похожий эффект и с одной камерой .)
А еще можно например сделать "детектор коробок". :idea: (то есть все что отдаленно напоминает нечто прямоугольное обводить 3д-рамочкой и желательно с размерами )
Зы
И не бойся "живого видео" по кадровая обработка ничем особенно от обработки отдельной картинки не отличается .
Да можешь смело для экскрементов брать как основу мой "динамический код" из ранних версий "подзорной трубы" !
Например вот этот :idea: :arrow: "Подзорная труба" версии 0.0057( не потому, что мне жалко более свежих версий, а просто потому-что, до подключения Супер-Зума там все сравнительно просто и стабильно )

Зы Зы
Но честно говоря пока с ходу не вник в суть проекта .... но у меня начало хоть что-то получаться только после вот такой "умной-бинаризации" ....
Код: Выделить всё
// 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;

Наверняка существует и более продвинутая методика предварительного выделения значимых элементов изображения (и при этом мене тормозная чем например всем известный "многоступенчатый" детектор Канни ) Но что-то похожее с входящим изображением делать в любом случае нужно .
Зы
Кстати, по идее, если прозрачно накладывать полученную выше описанным методом бинаризацию на исходный кадр можно неплохо "срезать угол "... :idea:

Код: Выделить всё
Прозрачность
procedure Blend2(Const Src1,Src2,Dst: TBitmap; CT: Integer;Amount: extended);
var w,h,x,y:integer;
    ps1,ps2,pd:pbytearray;
begin
w:=Src1.Width;
h:=Src1.Height;

for y:=0 to h-1 do begin
ps1:=Src1.ScanLine[y];
ps2:=Src2.ScanLine[y];
Dst.BeginUpdate; ;
pd:=Dst.ScanLine[y];
for x:=0 to w-1 do
If RGB(ps2[x*3+2],ps2[x*3+1],ps2[x*3])<>CT then
begin
If ABS(Amount-1)>=0.09   then begin
  pd[x*3]  :=round((1-Amount)*ps1[x*3]+Amount*ps2[x*3]);
  pd[x*3+1]:=round((1-Amount)*ps1[x*3+1]+Amount*ps2[x*3+1]);
  pd[x*3+2]:=round((1-Amount)*ps1[x*3+2]+Amount*ps2[x*3+2]);
  end else
  begin
   Move(ps2[x*3], pd[x*3],3);
  end
  end else Move(ps1[x*3], pd[x*3],3);
Dst.EndUpdate;
end;
end;
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Цифровая обработка

Сообщение olegy123 » 19.05.2018 12:56:09

Цель OpenVINO — ускорить процесс создания систем компьютерного зрения, предоставляя программистам интегрированную среду разработки, а также оптимизировать код этих продуктов, требующий больших вычислительных затрат, под разнообразные аппаратные платформы (CPU, GPU, FPGA) Intel.
https://habr.com/company/intel/blog/358752/

В состав OpenVINO Toolkit входят следующие составляющие:
Библиотеки OpenCV libraries
Рантайм OpenVX
Intel Deep Learning Deployment Toolkit (включая Model Optimizer and механизм выводов)
Compute Library for Deep Neural Networks (clDNN)
Intel Math Kernel Library for Deep Neural Networks (Intel MKL-DNN)
Ускоритель Deep learning для FPGA
Примеры кода, документация и модели


Список аппаратных платформ, поддерживаемых OpenVINO Toolkit:
Процессоры Intel Core, начиная с 6 поколения, с графикой Intel Iris Pro и Intel HD
Процессоры Intel Xeon, начиная с 5 поколения, с графикой Intel Iris Pro и Intel HD и без оной
Процессоры Intel Pentium N4200/5, N3350/5, N3450/5 с графикой Intel HD
Intel Movidius Vision Processing Unit
Intel Arria 10 FPGA GX development kit (требуется специальная версия, бета)
Intel Programmable Acceleration Card с Intel Arria 10 GX FPGA (требуется специальная версия, бета)
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Цифровая обработка

Сообщение Alex2013 » 20.05.2018 08:34:53

Ну во первых OpenVX это, как я понял, просто еще одна надстройка над OpenCV, что несколько снижает ее ценность ...
В вторых посмотрел доступные ролики и описания и сложилось у меня впечатление что к практическому использованию этих технологий создатели библиотек OpenVINO и OpenVХ еще и не приступали .
Почти все что они выкатывают как результат можно добиться с использованием фремворков предыдущего поколения OpenCV OpenСL и т.д.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Цифровая обработка

Сообщение Pavia » 21.05.2018 22:31:39

olegy123
Интелу не удаётся софт.
Увеличил число точек, результата не дало. Скорее напротив хуже стало. Бинаризация встроенная.
Изображение
:arrow: https://yadi.sk/d/aNKm73BA3WJrLc
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Цифровая обработка

Сообщение Alex2013 » 22.05.2018 04:41:50

Вобщем постараюсь завтра (точнее уже сегодня ! :wink: ) разобраться с кодом более подробно ...
(первая версия при нажатии на некоторые кнопки у меня просто висла, что несколько снижало энтузиазм и желание разбираться ) вычисление и распознавание углов интересует но сейчас я в своем проекте завис на ХендТрекинге
(Нашел пример на дельфи и пытаюсь переработать для "подзорной трубы" )
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Цифровая обработка

Сообщение Pavia » 22.05.2018 06:56:29

(первая версия при нажатии на некоторые кнопки у меня просто висла,

Генерация шаблонов не самая быстрая операция.
Для 13 то чек у меня 1-3 мнут. Анимация отключена что-бы ускорить.
А для 17 точек я даже не засекал около 15-20 минут.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Цифровая обработка

Сообщение olegy123 » 22.05.2018 13:47:02

Pavia писал(а):olegy123
Интелу не удаётся софт.
Что значит не удается? они что 1Ску компилировать должны?
Им хватает делать библиотеки с высокой оптимизацией.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Цифровая обработка

Сообщение Alex2013 » 22.05.2018 14:59:53

"Склетизация Занг-Суена" случаем не поможет ?
:idea:
ИзображениеИзображение
Тестовая прога
:arrow: ZhangSuen.zip :idea:
Код: Выделить всё
// Склетизация Занг-Суена
Procedure ZhangSuen(var B:TBitMap;c,pr: Integer;Full,Cl:Boolean);
const
  r_true=1;
  r_false=0;
  maxImageWidth = 2000;
  maxImageHeight = 2000;

type
  TRGB=record
    b,g,r:byte;
  end;

  ARGB=array [0..1] of TRGB;
  PARGB=^ARGB;

var
  ImgBArr: array[0..maxImageWidth,0..maxImageHeight] of byte;
  ImgBArr2: array[0..maxImageWidth,0..maxImageHeight] of byte;
  ImgBArrHeight,ImgBArrWidth:integer;
  pixeldeleted:boolean;

var
  p:PARGB;
  x,y:integer;
  //c: byte;
  bmp:Tbitmap;

procedure subtr;
var
  i,j:integer;
begin
  for i:=0 to ImgBArrWidth do
    for j:=0 to ImgBArrHeight do
      if ImgBArr2[i,j]=r_true then
      begin
        ImgBArr[i,j] := r_false;
        pixeldeleted:=true;
      end;
end;

  function t1a(i, j:integer; var a:array of integer; var b:integer):integer;
  var
  n,m:integer;
  begin
  {   Return the number of 01 patterns in the sequence of pixels
     P2 p3 p4 p5 p6 p7 p8 p9.}

     for n:=0 to 8-1 do
      a[n] := 0;

     if (i-1 >= 0) then
    begin
        a[0] := integer(ImgBArr[i-1,j]);
        if (j+1 < ImgBArrHeight) then
        a[1] := integer(ImgBArr[i-1,j+1]);
        if (j-1 >= 0) then
        a[7] := integer(ImgBArr[i-1,j-1]);
     end;

     if (i+1 < ImgBArrWidth) then
    begin
        a[4] := integer(ImgBArr[i+1,j]);
        if (j+1 < ImgBArrHeight) then
         a[3] := integer(ImgBArr[i+1,j+1]);
        if (j-1 >= 0) then
         a[5] := integer(ImgBArr[i+1,j-1]);
     end;

     if (j+1 < ImgBArrHeight) then
      a[2] := integer(ImgBArr[i,j+1]);
     if (j-1 >= 0) then
      a[6] := integer(ImgBArr[i,j-1]);

     m := 0;
    b := 0;
     for n:=0 to 6 do
    begin
        if ((a[n]=0) and (a[n+1]=1)) then
        m:=m+1;
        b := b + a[n];
     end;

     if ((a[7] = 0) and (a[0] = 1)) then
      m:=m+1;
     b := b + a[7];
     result := m;
  end;


Procedure SkeletizeZS1;
var
  i,j,n,m,k, cont, br,ar,p1,p2: integer;
   a:array [0..8] of integer;
begin
  pixeldeleted:=false;
{   Sub-iteration 1: }
  for i:=0 to ImgBArrWidth do
    for j:=0 to ImgBArrHeight do
    begin

      { Scan the entire image }
      if (ImgBArr[i,j] = r_false) then
      begin
        ImgBArr2[i,j] := r_false;
        continue;
      end;
      ar := t1a ( i, j, a, br);
      p1 := a[0]*a[2]*a[4];
      p2 := a[2]*a[4]*a[6];
      if ((ar = 1) and ((br>=2) and (br<=6)) and
          (p1 = 0) and (p2 = 0) ) then
      begin
        ImgBArr2[i,j] := r_true;
      end
      else
        ImgBArr2[i,j] := r_false;
    end;
  subtr;

{ Sub iteration 2: }
  for i:=0 to ImgBArrWidth do
    for j:=0 to ImgBArrHeight do
    begin
      { Scan the entire image }
      if (ImgBArr[i,j] = r_false) then
      begin
        ImgBArr2[i,j] := r_false;
        continue;
      end;
      ar := t1a ( i, j, a, br);
      p1 := a[0]*a[2]*a[6];
      p2 := a[0]*a[4]*a[6];
      if ((ar = 1) and ((br>=2) and (br<=6)) and
          (p1 = 0) and (p2 = 0) ) then
      begin
        ImgBArr2[i,j] := r_true;
      end
      else
        ImgBArr2[i,j] := r_false;
    end;
  subtr;
end;

begin

if b=nil then  exit;
if B.PixelFormat<>pf24bit then
begin
  bmp:=Tbitmap.Create;
  bmp.PixelFormat:=pf24bit;
  bmp.SetSize(B.Width,B.Height);
  bmp.Canvas.Draw(0,0,B);
  B.Assign(bmp);  bmp.Free;
// b.Free; b:=Bmp;
end;
  ImgBArrHeight:=B.height-1;
  ImgBArrWidth:=B.width-1;
  for y:=0 to ImgBArrHeight do
  begin
    p:=B.scanline[y];
    for x:=0 to ImgBArrWidth do
    begin
           if p[x].R<Red(pr) then
        ImgBArr[x,y]:=r_true
      else

       if p[x].G<Green(pr) then
        ImgBArr[x,y]:=r_true
      else
      if p[x].b<Blue(pr) then
        ImgBArr[x,y]:=r_true
      else
        ImgBArr[x,y]:=r_false;

     end;
  end;
If Full then begin
pixeldeleted:=true;
  while pixeldeleted do   SkeletizeZS1;
  end else
  SkeletizeZS1;

   for y:=0 to ImgBArrHeight do
   begin
    B.BeginUpdate;
    p:=B.scanline[y];
    for x:=0 to ImgBArrWidth do
    if ImgBArr[x,y]=1 then begin
     p[x].R:=Red(C);
     p[x].g:=Green(C);
     p[x].b:=Blue(C);


      //255-integer(ImgBArr[x,y])*255;
      //p[x].g:=255-integer(ImgBArr[x,y])*255;
      //p[x].r:=255-integer(ImgBArr[x,y])*255;
      //if ImgBArr[x,y]=1 then Move(C,p^[X],3);
    end else
    if cl then begin
     p[x].R:=255;
     p[x].g:=255;
     p[x].b:=255;
     end;
     B.EndUpdate;
    end;
   end;


Зы
В копилку знаний (Может что полезного найдется - кстати это в частности и о использовании библиотеки Intel® Integrated Performance Primitives так что "интеля " когда захотят софт делать тоже умеют ) ...
https://www.intuit.ru/studies/courses/10621/1105/info
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Цифровая обработка

Сообщение Pavia » 20.07.2018 22:05:26

ИИ в теории оптимизаций мешей для 3D сканирования.

https://www.youtube.com/watch?v=M35GED17Y0s
https://www.youtube.com/watch?v=MSNsk6W4mKM
https://www.youtube.com/watch?v=hBDh7QX82yc
https://www.youtube.com/watch?v=HmcG0k_-gi8

Последние видео мне напомнило алгоритм выделения связанных компонент. А так же проблему сегментации.
И тут я вспомнил, что неплохо с этим справлялся алгоритм отжига. Хотя он и имел недостатки.
Недостатки очень просты и понятны это устойчивость. Если у нас первая производная постоянна то шарик будет скатываться. А если равно нулю то ещё он может остановится где угодно.

Это элементарно детектируется и как следствие фильтруется.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Цифровая обработка

Сообщение Alex2013 » 22.07.2018 13:26:10

Оно ?
https://habr.com/post/112189/
(Пока правда не понял как это чудо к сегментации прикрутить ) :roll:

Зы
Обзор алгоритмов сегментации
https://habr.com/company/intel/blog/266347/
http://masters.donntu.org/2010/fknt/tsi ... ticle9.htm
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44


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

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

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

Рейтинг@Mail.ru