00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #include <qvdta.h>
00026 #include <qvip.h>
00027 #include <qvipp.h>
00028
00029 #include <QVMatrix>
00030 #include <QVHessianPointDetector>
00031
00032 QVHessianPointDetector::QVHessianPointDetector(QString name): QVWorker(name)
00033 {
00034 addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00035 addProperty< QVImage<uChar,1> >("Feature response image", outputFlag);
00036 addProperty< QList < QPointF > >("Feature locations", outputFlag);
00037 addProperty< int >("Max number of corners", inputFlag, 300, "Maximal number of points to detect", 10, 1000);
00038 }
00039
00040 void QVHessianPointDetector::iterate()
00041 {
00042
00043 const QVImage<uChar> image = getPropertyValue< QVImage<uChar,3> >("Input image");
00044 const int maxNumberCorners = getPropertyValue< int >("Max number of corners");
00045 const int rows = image.getRows(), cols = image.getCols();
00046
00047 timeFlag("Read input properties");
00048
00049
00050 QVImage<sFloat> cornerResponseImage(cols, rows);
00051 FilterHessianCornerResponseImage(image, cornerResponseImage);
00052 setPropertyValue< QVImage<uChar> >("Feature response image", cornerResponseImage);
00053 timeFlag("Feature response image");
00054
00055
00056 const QList<QPointF> actualPoints = GetMaximalResponsePoints3(cornerResponseImage);
00057 timeFlag("Get corners and intensity responses");
00058
00059 const int size = actualPoints.size();
00060 setPropertyValue< QList<QPointF> >("Feature locations", actualPoints.mid(MAX(0,size-maxNumberCorners),maxNumberCorners) );
00061 timeFlag("Store properties values");
00062 }
00063