diff --git a/modules/face/src/mace.cpp b/modules/face/src/mace.cpp index 7f7c7b95a..14a3a5eb0 100644 --- a/modules/face/src/mace.cpp +++ b/modules/face/src/mace.cpp @@ -119,9 +119,9 @@ struct MACEImpl CV_FINAL : MACE { int IMGSIZE_2X = IMGSIZE * 2; int TOTALPIXEL = IMGSIZE_2X * IMGSIZE_2X; - Mat_ D(TOTALPIXEL, 1, 0.0); - Mat_ S(TOTALPIXEL, size, 0.0); - Mat_ SPLUS(size, TOTALPIXEL, 0.0); + Mat_ D(TOTALPIXEL, 1, 0.0); + Mat_ S(TOTALPIXEL, size, Vec2d(0,0)); + Mat_ SPLUS(size, TOTALPIXEL, Vec2d(0,0)); for (int i=0; i dftImg = isdft ? images[i] : dftImage(images[i]); for (int l=0; l DSQ; cv::sqrt(D, DSQ); + Mat_ DINV = TOTALPIXEL * size / DSQ; -#if 0 // https://github.com/opencv/opencv_contrib/issues/1848 - // FIXIT What is expected here? complex numbers math? - // D(,)[1] is 0 (always) - Mat sq; cv::sqrt(D, sq); // Per-element sqrt(): sq(,)[1] is 0 (always) - Mat_ DINV = TOTALPIXEL * size / sq; // "per-element" division which provides "Inf" -#else - Mat sq; cv::sqrt(D.reshape(1).col(0), sq); - Mat_ DINV(TOTALPIXEL, 1, Vec2d(0, 0)); - DINV.reshape(1).col(0) = TOTALPIXEL * size / sq; -#endif - Mat_ DINV_S(TOTALPIXEL, size, 0.0); - Mat_ SPLUS_DINV(size, TOTALPIXEL, 0.0); + Mat_ DINV_S(TOTALPIXEL, size); + Mat_ SPLUS_DINV(size, TOTALPIXEL); for (int l=0; l SPLUS_DINV_S = SPLUS_DINV * S; - Mat_ SPLUS_DINV_S_INV(size, size); - Mat_ SPLUS_DINV_S_INV_1(2*size, 2*size); + Mat_ SPLUS_DINV_S_INV_1(2*size, 2*size, 0.0); for (int l=0; l SPLUS_DINV_S_INV(size, size); for (int l=0; l Hmace = DINV_S * SPLUS_DINV_S_INV; - Mat_ C(size,1, Vec2d(1,0)); + Mat_ C(size, 1, Vec2d(1,0)); maceFilter = Mat(Hmace * C).reshape(2,IMGSIZE_2X); }