diff --git a/dlib/image_transforms/fhog.h b/dlib/image_transforms/fhog.h index 226b7522e..2cd2d41a7 100644 --- a/dlib/image_transforms/fhog.h +++ b/dlib/image_transforms/fhog.h @@ -21,16 +21,16 @@ namespace dlib namespace impl_fhog { - template + template inline typename dlib::enable_if_c::rgb>::type get_gradient ( const int r, const int c, const image_type& img, - matrix& grad, - double& len + matrix& grad, + T& len ) { - matrix grad2, grad3; + matrix grad2, grad3; // get the red gradient grad(0) = (int)img[r][c+1].red-(int)img[r][c-1].red; grad(1) = (int)img[r+1][c].red-(int)img[r-1][c].red; @@ -39,12 +39,12 @@ namespace dlib // get the green gradient grad2(0) = (int)img[r][c+1].green-(int)img[r][c-1].green; grad2(1) = (int)img[r+1][c].green-(int)img[r-1][c].green; - double v2 = length_squared(grad2); + T v2 = length_squared(grad2); // get the blue gradient grad3(0) = (int)img[r][c+1].blue-(int)img[r][c-1].blue; grad3(1) = (int)img[r+1][c].blue-(int)img[r-1][c].blue; - double v3 = length_squared(grad3); + T v3 = length_squared(grad3); // pick color with strongest gradient if (v2 > len) @@ -144,13 +144,13 @@ namespace dlib // ------------------------------------------------------------------------------------ - template + template inline typename dlib::disable_if_c::rgb>::type get_gradient ( const int r, const int c, const image_type& img, - matrix& grad, - double& len + matrix& grad, + T& len ) { grad(0) = (int)get_pixel_intensity(img[r][c+1])-(int)get_pixel_intensity(img[r][c-1]); @@ -200,7 +200,7 @@ namespace dlib int o, int x, int y, - const double& value + const T& value ) { hog[o][y][x] = value; @@ -255,7 +255,7 @@ namespace dlib int o, int x, int y, - const double& value + const T& value ) { hog[y][x](o) = value; @@ -336,7 +336,7 @@ namespace dlib // unit vectors used to compute gradient orientation - matrix directions[9]; + matrix directions[9]; directions[0] = 1.0000, 0.0000; directions[1] = 0.9397, 0.3420; directions[2] = 0.7660, 0.6428; @@ -417,16 +417,16 @@ namespace dlib // Now process the right columns that don't fit into simd registers. for (; x < visible_nc; x++) { - matrix grad; - double v; + matrix grad; + float v; get_gradient(y,x,img,grad,v); // snap to one of 18 orientations - double best_dot = 0; + float best_dot = 0; int best_o = 0; for (int o = 0; o < 9; o++) { - const double dot = dlib::dot(directions[o], grad); + const float dot = dlib::dot(directions[o], grad); if (dot > best_dot) { best_dot = dot; @@ -444,7 +444,7 @@ namespace dlib } } - const double eps = 0.0001; + const float eps = 0.0001; // compute features for (int y = 0; y < hog_nr; y++) { @@ -572,7 +572,7 @@ namespace dlib } // unit vectors used to compute gradient orientation - matrix directions[9]; + matrix directions[9]; directions[0] = 1.0000, 0.0000; directions[1] = 0.9397, 0.3420; directions[2] = 0.7660, 0.6428; @@ -586,8 +586,8 @@ namespace dlib // First we allocate memory for caching orientation histograms & their norms. - const int cells_nr = (int)((double)img.nr()/(double)cell_size + 0.5); - const int cells_nc = (int)((double)img.nc()/(double)cell_size + 0.5); + const int cells_nr = (int)((float)img.nr()/(float)cell_size + 0.5); + const int cells_nc = (int)((float)img.nc()/(float)cell_size + 0.5); if (cells_nr == 0 || cells_nc == 0) { @@ -629,10 +629,10 @@ namespace dlib // First populate the gradient histograms for (int y = 1; y < visible_nr; y++) { - const double yp = ((double)y+0.5)/(double)cell_size - 0.5; + const float yp = ((float)y+0.5)/(float)cell_size - 0.5; const int iyp = (int)std::floor(yp); - const double vy0 = yp-iyp; - const double vy1 = 1.0-vy0; + const float vy0 = yp - iyp; + const float vy1 = 1.0 - vy0; int x; for (x = 1; x < visible_nc-3; x+=4) { @@ -708,16 +708,16 @@ namespace dlib // Now process the right columns that don't fit into simd registers. for (; x < visible_nc; x++) { - matrix grad; - double v; + matrix grad; + float v; get_gradient(y,x,img,grad,v); // snap to one of 18 orientations - double best_dot = 0; + float best_dot = 0; int best_o = 0; for (int o = 0; o < 9; o++) { - const double dot = dlib::dot(directions[o], grad); + const float dot = dlib::dot(directions[o], grad); if (dot > best_dot) { best_dot = dot; @@ -732,10 +732,10 @@ namespace dlib v = std::sqrt(v); // add to 4 histograms around pixel using bilinear interpolation - const double xp = ((double)x+0.5)/(double)cell_size - 0.5; + const float xp = ((double)x + 0.5) / (double)cell_size - 0.5; const int ixp = (int)std::floor(xp); - const double vx0 = xp-ixp; - const double vx1 = 1.0-vx0; + const float vx0 = xp - ixp; + const float vx1 = 1.0 - vx0; hist[iyp+1][ixp+1](best_o) += vy1*vx1*v; hist[iyp+1+1][ixp+1](best_o) += vy0*vx1*v; @@ -756,7 +756,7 @@ namespace dlib } } - const double eps = 0.0001; + const float eps = 0.0001; // compute features for (int y = 0; y < hog_nr; y++) { @@ -930,14 +930,14 @@ namespace dlib template < typename image_type > - matrix extract_fhog_features( + matrix extract_fhog_features( const image_type& img, int cell_size = 8, int filter_rows_padding = 1, int filter_cols_padding = 1 ) { - matrix feats; + matrix feats; extract_fhog_features(img, feats, cell_size, filter_rows_padding, filter_cols_padding); return feats; } @@ -1093,7 +1093,7 @@ namespace dlib } } - const double thresh = mean(himg) + 4*stddev(himg); + const float thresh = mean(himg) + 4 * stddev(himg); if (thresh != 0) return matrix_cast(upperbound(round(himg*255/thresh),255)); else @@ -1178,7 +1178,7 @@ namespace dlib } } - const double thresh = mean(himg) + 4*stddev(himg); + const float thresh = mean(himg) + 4 * stddev(himg); if (thresh != 0) return matrix_cast(upperbound(round(himg*255/thresh),255)); else