Tweaked binarize functions to do integer multiplication rather than float -- slightly faster

This commit is contained in:
Matt Hill
2014-02-20 17:23:09 -06:00
parent 0aece1a3ac
commit 73707ffcca

View File

@@ -42,7 +42,9 @@
float calcLocalStats (Mat &im, Mat &map_m, Mat &map_s, int winx, int winy) { float calcLocalStats (Mat &im, Mat &map_m, Mat &map_s, int winx, int winy) {
float m,s,max_s, sum, sum_sq, foo; float m,s,max_s;
long sum, sum_sq;
uchar foo;
int wxh = winx/2; int wxh = winx/2;
int wyh = winy/2; int wyh = winy/2;
int x_firstth= wxh; int x_firstth= wxh;
@@ -50,6 +52,7 @@ float calcLocalStats (Mat &im, Mat &map_m, Mat &map_s, int winx, int winy) {
int y_firstth= wyh; int y_firstth= wyh;
float winarea = winx*winy; float winarea = winx*winy;
max_s = 0; max_s = 0;
for (int j = y_firstth ; j<=y_lastth; j++) for (int j = y_firstth ; j<=y_lastth; j++)
{ {
@@ -61,8 +64,8 @@ float calcLocalStats (Mat &im, Mat &map_m, Mat &map_s, int winx, int winy) {
sum += foo; sum += foo;
sum_sq += foo*foo; sum_sq += foo*foo;
} }
m = sum / winarea; m = ((float)sum) / winarea;
s = sqrt ((sum_sq - (sum*sum)/winarea)/winarea); s = sqrt ((((float)sum_sq) - ((float)(sum*sum))/winarea)/winarea);
if (s > max_s) if (s > max_s)
max_s = s; max_s = s;
map_m.fset(x_firstth, j, m); map_m.fset(x_firstth, j, m);
@@ -80,8 +83,8 @@ float calcLocalStats (Mat &im, Mat &map_m, Mat &map_s, int winx, int winy) {
sum += foo; sum += foo;
sum_sq += foo*foo; sum_sq += foo*foo;
} }
m = sum / winarea; m = ((float)sum) / winarea;
s = sqrt ((sum_sq - (sum*sum)/winarea)/winarea); s = sqrt ((((float)sum_sq) - ((float) (sum*sum))/winarea)/winarea);
if (s > max_s) if (s > max_s)
max_s = s; max_s = s;
map_m.fset(i+wxh, j, m); map_m.fset(i+wxh, j, m);