Hello all,
EMD and EMDL1 seem to provide different values for the same signatures. Can anybody explain? You can find my code below.
Thanks!
int main(int argc, char** argv) {
//make signature
Mat sig1(4, 3, CV_32FC1);
Mat sig2(4, 3, CV_32FC1);
sig1.at< float>(0, 0) = 0.5;
sig1.at< float>(0, 1) = 0;
sig1.at< float>(0, 2) = 0;
sig1.at< float>(1, 0) = 0.5;
sig1.at< float>(1, 1) = 1;
sig1.at< float>(1, 2) = 1;
sig1.at< float>(2, 0) = 0.0;
sig1.at< float>(2, 1) = 1;
sig1.at< float>(2, 2) = 0;
sig1.at< float>(3, 0) = 0.0;
sig1.at< float>(3, 1) = 0;
sig1.at< float>(3, 2) = 1;
sig2.at< float>(0, 0) = .25;
sig2.at< float>(0, 1) = 0;
sig2.at< float>(0, 2) = 0;
sig2.at< float>(1, 0) = .25;
sig2.at< float>(1, 1) = 1;
sig2.at< float>(1, 2) = 1;
sig2.at< float>(2, 0) = .25;
sig2.at< float>(2, 1) = 1;
sig2.at< float>(2, 2) = 0;
sig2.at< float>(3, 0) = .25;
sig2.at< float>(3, 1) = 0;
sig2.at< float>(3, 2) = 1;
float emd = cv::EMD(sig1, sig2, CV_DIST_L1); //emd 0 is best matching.
printf("similarity emd %5.5f %%\n", (1 - emd) * 100);
emd = cv::EMDL1(sig1, sig2); //emd 0 is best matching.
printf("similarity emd L1 %5.5f %%\n", (1 - emd) * 100);
waitKey(0); // Wait for a keystroke in the window
return 0;
}