|
@@ -9,6 +9,7 @@
|
|
|
|
|
|
#include "ConvolutionFeature.h"
|
|
#include "ConvolutionFeature.h"
|
|
#include "vislearning/cbaselib/FeaturePool.h"
|
|
#include "vislearning/cbaselib/FeaturePool.h"
|
|
|
|
+#include "vislearning/baselib/cc.h"
|
|
|
|
|
|
using namespace OBJREC;
|
|
using namespace OBJREC;
|
|
|
|
|
|
@@ -121,27 +122,42 @@ NICE::Vector ConvolutionFeature::getFeatureVector( const Example *example ) cons
|
|
|
|
|
|
int halfwsx = std::floor ( window_size_x / 2 );
|
|
int halfwsx = std::floor ( window_size_x / 2 );
|
|
int halfwsy = std::floor ( window_size_y / 2 );
|
|
int halfwsy = std::floor ( window_size_y / 2 );
|
|
- int numChannels = img->channels();
|
|
|
|
|
|
+ int step = window_size_x*window_size_y;
|
|
|
|
|
|
int k = 1;
|
|
int k = 1;
|
|
- for ( int c = 0; c < numChannels; c++ )
|
|
|
|
- for ( int v = -halfwsy; v <= halfwsy; v++ )
|
|
|
|
- for ( int u = -halfwsx; u <= halfwsx; u++, k++ )
|
|
|
|
|
|
+ for ( int v = -halfwsy; v <= halfwsy; v++ )
|
|
|
|
+ for ( int u = -halfwsx; u <= halfwsx; u++, k++ )
|
|
|
|
+ {
|
|
|
|
+ int uu = u;
|
|
|
|
+ int vv = v;
|
|
|
|
+ if (x+u < 0 || x+u >= xsize) uu=-u;
|
|
|
|
+ if (y+v < 0 || y+v >= ysize) vv=-v;
|
|
|
|
+
|
|
|
|
+ if ( x+uu > 0
|
|
|
|
+ && x+uu < xsize
|
|
|
|
+ && y+vv > 0
|
|
|
|
+ && y+vv < ysize
|
|
|
|
+ && k < vec.size() )
|
|
{
|
|
{
|
|
- int uu = u;
|
|
|
|
- int vv = v;
|
|
|
|
- if (x+u < 0 || x+u >= xsize) uu=-u;
|
|
|
|
- if (y+v < 0 || y+v >= ysize) vv=-v;
|
|
|
|
-
|
|
|
|
- if ( x+uu > 0
|
|
|
|
- && x+uu < xsize
|
|
|
|
- && y+vv > 0
|
|
|
|
- && y+vv < ysize
|
|
|
|
- && k < vec.size() )
|
|
|
|
|
|
+ if (isColor)
|
|
|
|
+ {
|
|
|
|
+ // using HSV color space
|
|
|
|
+ double h,s,v;
|
|
|
|
+ double r = img->get(x+uu,y+vv,0);
|
|
|
|
+ double g = img->get(x+uu,y+vv,1);
|
|
|
|
+ double b = img->get(x+uu,y+vv,2);
|
|
|
|
+
|
|
|
|
+ ColorConversion::ccRGBtoHSV(r, g, b, &h, &s, &v);
|
|
|
|
+ vec[k] = h;
|
|
|
|
+ vec[k+step] = s;
|
|
|
|
+ vec[k+step+step] = v;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- vec[k] = img->get(x+uu,y+vv,c);
|
|
|
|
|
|
+ vec[k] = img->get(x+uu,y+vv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
return vec;
|
|
return vec;
|
|
}
|
|
}
|
|
@@ -200,26 +216,42 @@ double ConvolutionFeature::val ( const Example *example ) const
|
|
|
|
|
|
int halfwsx = std::floor ( window_size_x / 2 );
|
|
int halfwsx = std::floor ( window_size_x / 2 );
|
|
int halfwsy = std::floor ( window_size_y / 2 );
|
|
int halfwsy = std::floor ( window_size_y / 2 );
|
|
- int numChannels = img->channels();
|
|
|
|
|
|
+ int step = window_size_x*window_size_y;
|
|
|
|
|
|
int k = 1;
|
|
int k = 1;
|
|
- for ( int c = 0; c < numChannels; c++ )
|
|
|
|
- for ( int v = -halfwsy; v <= halfwsy; v++ )
|
|
|
|
- for ( int u = -halfwsx; u <= halfwsx; u++, k++ )
|
|
|
|
|
|
+ for ( int v = -halfwsy; v <= halfwsy; v++ )
|
|
|
|
+ for ( int u = -halfwsx; u <= halfwsx; u++, k++ )
|
|
|
|
+ {
|
|
|
|
+ int uu = u;
|
|
|
|
+ int vv = v;
|
|
|
|
+ if (x+u < 0 || x+u >= xsize) uu=-u;
|
|
|
|
+ if (y+v < 0 || y+v >= ysize) vv=-v;
|
|
|
|
+ if ( x+uu > 0
|
|
|
|
+ && x+uu < xsize
|
|
|
|
+ && y+vv > 0
|
|
|
|
+ && y+vv < ysize
|
|
|
|
+ && k < beta->size() )
|
|
{
|
|
{
|
|
- int uu = u;
|
|
|
|
- int vv = v;
|
|
|
|
- if (x+u < 0 || x+u >= xsize) uu=-u;
|
|
|
|
- if (y+v < 0 || y+v >= ysize) vv=-v;
|
|
|
|
- if ( x+uu > 0
|
|
|
|
- && x+uu < xsize
|
|
|
|
- && y+vv > 0
|
|
|
|
- && y+vv < ysize
|
|
|
|
- && k < beta->size() )
|
|
|
|
|
|
+ if (isColor)
|
|
{
|
|
{
|
|
- val1 += (double)img->get(x+uu,y+vv,c) * beta->operator [](k);
|
|
|
|
|
|
+ // using HSV color space
|
|
|
|
+ double h,s,v;
|
|
|
|
+ double r = img->get(x+uu,y+vv,0);
|
|
|
|
+ double g = img->get(x+uu,y+vv,1);
|
|
|
|
+ double b = img->get(x+uu,y+vv,2);
|
|
|
|
+
|
|
|
|
+ ColorConversion::ccRGBtoHSV(r, g, b, &h, &s, &v);
|
|
|
|
+ val1 += h * beta->operator [](k);
|
|
|
|
+ val1 += s * beta->operator [](k+step);
|
|
|
|
+ val1 += v * beta->operator [](k+step+step);
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ val1 += (double)img->get(x+uu,y+vv) * beta->operator [](k);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
return val1;
|
|
return val1;
|
|
}
|
|
}
|