IvoX писал(а):А не подскажите где можно посмотреть про СЁРФ?
Есть хотя бы объяснение его работы пошагово,Что бы понять что брать за основу,если самому аналоги делать?
Слишком много математики я не вытяну.
Я для себя нашел пока что реализацию FAST алгоритма на си++,постараюсь за месяц как будет время,переписать на Паскаль.
Извиняюсь за запоздалый ответ, давно не заглядывал в свою тему ...
SURF (если ты о нем ) я достаточно грубо выдрал из примера к OpenCV
![Изображение](http://i.piccy.info/i9/7a7d3b4164382b0b7d171cd936b1161e/1578749027/44322/1356582/cv_ExtractSURF_500.jpg)
(Сам пример адаптированный под Лазарус с почти пошаговыми комментариями (исходник бинарник DLL )
ТУТ
cv_ExtractSURF.7z )
Или загляни в unit7.pas в сборке
Truba_DS_0_0059_14_3_1M0_SRC.7z
Функцию SurfTest можно подключить любой программе все модули и библиотеки в есть комплекте последний сборки .
Function SurfTest( obj, img, st: pointer; PV:Bool;Var OutAP):Double;// PV - Показать круги вокруг характерных точек точек;
//Obj-образец img - текущий кадр OutAP - вершины четырехугольника выделения .
( pointer преодолевает легкое осложнение из за разных версий оболочки-хедера вокруг OpenCV )
Схематично применяется так ...
uses
Windows,Classes, SysUtils, ipl,OpenCV,unit7...;
...
var
OutAP:array [0..3] of CVPoint;
obj, img : pIplImage;
st: pCvMemStorage;
BitmapObj,Bitmap:TBitmap;
begin
//Bitmap - обычный TBitmap (24 бита)
cs1.width:=Bitmap.Width; cs1.height:=Bitmap.height; //cs1: CvSize;
img := cvCreateImage( cs1, 8, 3 );
obj := cvCreateImage( cs1, 8, 3 );
st := cvCreateMemStorage(0);
Move(Bitmap.RawImage.Data^,Img.ImageData^, Img.ImageSize);
//Bitmap - обычный TBitmap (24 бита)
//тоже самое для obj
Move(BitmapObj.RawImage.Data^,Obj.ImageData^, Img.ImageSize);
unit7.SurfTest(Obj,Img,st,False,OutAP);
// рамка... SurfOk если что-то найдено .
If SurfOk then for j := 0 to 3 do
cvLine(Img, OutAP[j],OutAP[(j+1) mod 4],cvScalar_(255,0,255,0 ));
IplImage2Bitmap(img,Bitmap); // обратно в Bitmap
cvReleaseImage(Obj;
cvReleaseImage(Img);
cvReleaseMemStorage(st);
end;
Зы
Разумеется Bitmap и BitmapObj нужно подготовить, а Bitmap потом еще и показать .
Зы Зы
Ну а если сразу использовать OpenCV то конверсия в Bitmap и обратно не нужна .
Добавлено спустя 37 минут 32 секунды:IvoX писал(а):Я для себя нашел пока что реализацию FAST алгоритма на си++,постараюсь за месяц как будет время,переписать на Паскаль.
Интересно чем FAST отличается от SURF ? Когда читал о них понял только то, что они очень похожи .
Зы
Для моего проекта нужно надежное выделение/распознавание рук и жестов . "Каскады Хаара" хороший выход, но готовых профилей для ладони не нашел.
Может что посоветуешь ?
Добавлено спустя 22 часа 22 минуты 56 секунд:Извиняюсь, ошибся это SIFT похож на SURF... кстати еще есть ORB и BRIEF.
Зі
В примерах к OpenCV есть и CameraShift.dpr но я не думаю что но сильно лучше SURF
Добавлено спустя 40 минут 59 секунд:Ура ! Раскопал модуль ocv.cls.features2d и пример FeatureDetector.dpr
Там есть все методы скопом .
- Код: Выделить всё
// feature detector name
fdtFAST = 'FAST'; // FastFeatureDetector
fdtSTAR = 'STAR'; // StarFeatureDetector
fdtSIFT = 'SIFT'; // SIFT (nonfree module)
fdtSURF = 'SURF'; // SURF (nonfree module)
fdtORB = 'ORB'; // ORB
fdtBRISK = 'BRISK'; // BRISK
fdtMSER = 'MSER'; // MSER
fdtGFTT = 'GFTT'; // GoodFeaturesToTrackDetector
fdtHARRIS = 'HARRIS'; // GoodFeaturesToTrackDetector with Harris detector enabled
fdtDense = 'Dense'; // DenseFeatureDetector
fdtSimpleBlob = 'SimpleBlob'; // SimpleBlobDetector