Quantcast
Channel: OpenCV Q&A Forum - Latest question feed
Viewing all articles
Browse latest Browse all 19555

Bio-inspired features returns NaNs

$
0
0
Hello, I am using bif function (bif.cpp) from the extra module 'face' of Opencv-3.0.1. When I run the function for a test image, the returned feature vector includes many `NaN` values. Could you please help me understand why this is happening? #include "opencv2/opencv.hpp" #include "opencv2/face/bif.hpp" #include using namespace cv; using namespace std; int main(int argc, char** argv) { cv::Mat fea; cv::Ptr bif = cv::face::createBIF(); cv::Mat image(60, 60, CV_32F); cv::theRNG().fill(image, cv::RNG::UNIFORM, 0, 1); bif->compute(image, fea); cout << "fea = " << endl << " " << fea << endl << endl; return 0; } Thank you in advance. **EDIT:** Sorry for my delayed edit, but please let me ask something more. I have made the changes you suggested and for most of the images the `NaN` value disappeared. However, the problem for some images is not fixed. I am giving an example below. Could you please provide some extra help on this? ![image description](/upfiles/14761319156247417.png) **EDIT Possible answer:** The code of bif.cpp seems to implement correctly the algorithm presented in the corresponding paper, so the problem of negative values in `sqrt` is not algorithmic. By debugging the code, I noticed that the negative values were very small, having order of magnitude 10^-17 and 10^-19 for the specific example image and values of order 10^-17 to 10^-21 for other images. According to [this](http://stackoverflow.com/questions/4453372/sqrt1-0-pow1-0-2-returns-nan) post, these very small negative numbers are smaller than the numeric limit for double values and can be casted to 0. Therefore, I suggest that the line 210 can be: sd = sqrt((sd / area - mean mean) < 0 & abs((sd / area - mean mean)) < std::numeric_limits::epsilon() ? 0 : (sd / area - mean * mean)); If `(sd / area - mean mean)` is positive, nothing changes. If `(sd / area - mean mean)` is negative and smaller than the numeric limit for doubles, it is set to 0. By changing line of code 210 as above, no `NaN` values emerge.

Viewing all articles
Browse latest Browse all 19555

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>