Skip to content

Commit f58493d

Browse files
authored
Merge pull request #1849 from alalek:workaround_1848
2 parents cd8a0a3 + 19efe30 commit f58493d

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

modules/face/src/mace.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,22 @@ struct MACEImpl CV_FINAL : MACE {
135135
}
136136
}
137137

138-
Mat sq; cv::sqrt(D, sq);
139-
Mat_<Vec2d> DINV = TOTALPIXEL * size / sq;
138+
#if 0 // https://github.com/opencv/opencv_contrib/issues/1848
139+
// FIXIT What is expected here? complex numbers math?
140+
// D(,)[1] is 0 (always)
141+
Mat sq; cv::sqrt(D, sq); // Per-element sqrt(): sq(,)[1] is 0 (always)
142+
Mat_<Vec2d> DINV = TOTALPIXEL * size / sq; // "per-element" division which provides "Inf"
143+
#else
144+
Mat sq; cv::sqrt(D.reshape(1).col(0), sq);
145+
Mat_<Vec2d> DINV(TOTALPIXEL, 1, Vec2d(0, 0));
146+
DINV.reshape(1).col(0) = TOTALPIXEL * size / sq;
147+
#endif
140148
Mat_<Vec2d> DINV_S(TOTALPIXEL, size, 0.0);
141149
Mat_<Vec2d> SPLUS_DINV(size, TOTALPIXEL, 0.0);
142150
for (int l=0; l<size; l++) {
143151
for (int m=0; m<TOTALPIXEL; m++) {
144152
SPLUS_DINV(l, m)[0] = SPLUS(l,m)[0] * DINV(m,0)[0];
145-
SPLUS_DINV(l, m)[1] = SPLUS(l,m)[1] * DINV(m,0)[1];
153+
SPLUS_DINV(l, m)[1] = SPLUS(l,m)[1] * DINV(m,0)[1]; // FIXIT: DINV(,)[1] is 0 (always)
146154
DINV_S(m, l)[0] = S(m,l)[0] * DINV(m,0)[0];
147155
DINV_S(m, l)[1] = S(m,l)[1] * DINV(m,0)[1];
148156
}

0 commit comments

Comments
 (0)