\r
if (threadIdx.x == 0)\r
{\r
- val = x > 0 ? row[x - 1] : row[x + 1];\r
+ val = x > 0 ? row[x - 1] : row[1];\r
sh_row[0] = val.x;\r
sh_row[(nthreads + 2)] = val.y;\r
sh_row[2 * (nthreads + 2)] = val.z;\r
\r
if (threadIdx.x == blockDim.x - 1)\r
{\r
- val = (x < width - 1) ? row[x + 1] : row[x - 1];\r
+ val = (x < width - 1) ? row[x + 1] : row[width - 2];\r
sh_row[blockDim.x + 1] = val.x;\r
sh_row[blockDim.x + 1 + (nthreads + 2)] = val.y;\r
sh_row[blockDim.x + 1 + 2 * (nthreads + 2)] = val.z;\r
sh_row[threadIdx.x + 1] = row[x - 2];\r
\r
if (threadIdx.x == 0)\r
- sh_row[0] = x > 0 ? row[x - 1] : row[x + 1];\r
+ sh_row[0] = x > 0 ? row[x - 1] : row[1];\r
\r
if (threadIdx.x == blockDim.x - 1)\r
- sh_row[blockDim.x + 1] = (x < width - 1) ? row[x + 1] : row[x - 1];\r
+ sh_row[blockDim.x + 1] = (x < width - 1) ? row[x + 1] : row[width - 2];\r
\r
__syncthreads();\r
if (x < width)\r
{
public:
enum { L2Hys=0 };
+ enum { DEFAULT_NLEVELS=64 };
CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),
cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),
- histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true)
+ histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),
+ nlevels(DEFAULT_NLEVELS)
{}
CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,
Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,
int _histogramNormType=HOGDescriptor::L2Hys,
- double _L2HysThreshold=0.2, bool _gammaCorrection=false)
+ double _L2HysThreshold=0.2, bool _gammaCorrection=false, int _nlevels=DEFAULT_NLEVELS)
: winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),
nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),
histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),
- gammaCorrection(_gammaCorrection)
+ gammaCorrection(_gammaCorrection), nlevels(_nlevels)
{}
CV_WRAP HOGDescriptor(const String& filename)
CV_PROP double L2HysThreshold;
CV_PROP bool gammaCorrection;
CV_PROP vector<float> svmDetector;
+ CV_PROP int nlevels;
};
double scale0, int groupThreshold) const
{
double scale = 1.;
- const int maxLevels = 64;
int levels = 0;
vector<double> levelScale;
- for( levels = 0; levels < maxLevels; levels++ )
+ for( levels = 0; levels < nlevels; levels++ )
{
levelScale.push_back(scale);
if( cvRound(img.cols/scale) < winSize.width ||