Пока ещё не завершены исследования. Нехватает препроцессинга. Есть идеи как его лучше сделать?
И как видно артефакты с линиями хотя они в классе "не углы" надо разбираться хотя думаю понятно где надо подкрутить.
Посмотреть код
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 моделей по серии снимков. Для склейки изображений в панорамы. Для трекинга объектов в кадре. К примеру отслеживания губ и бровей при создания эмоджи.
Так как большинство дальнейших алгоритмов идут с видео. А продемонстрировать пока нечего. Собственно хотелось услышать в какой форме или вернее какой дизайн для демонстрации углового детектора выбрать? Собственно хочу услышать ваши предложения.