这是我根据以下论文编写的函数。 (应该检查我的代码!将不胜感激!)
需要关注的论文:A J Baddeley:二进制图像的错误度量
另外作者还有一个统计包,代码可以在里面找到。它被称为“spatstat”www.spatstat.org。要使用 spatstat,首先从 http://www.r-project.org/ 下载 R-Stat。误差度量可用作称为“deltametric”的函数。要查看帮助文件,请输入 help(deltametric)。
代码说明:
这个函数的输入两个文件名,应该是二进制图片文件!返回值是 Baddeley 错误度量值。
还应该包括 OpenCV 标头和命名空间!
float baddeleyerror (const char * a_file, const char* b_file)
{
Mat A,B,Adist,Bdist,Z;
double c=5;
double p=2;
double nelem;
double minval, maxval;
A=imread(a_file,0);
B=imread(b_file,0);
nelem=A.rows*A.cols;
A=A>1;
B=B>1;
distanceTransform(A,Adist,CV_DIST_L1,3);
distanceTransform(B,Bdist,CV_DIST_L1,3);
min(Adist, c, Adist);
min(Bdist, c, Bdist);
minMaxLoc(Adist, &minval, &maxval, 0, 0);
Adist.convertTo(Adist, CV_8UC1, 255/maxval, 1);
minMaxLoc(Bdist, &minval, &maxval, 0, 0);
Bdist.convertTo(Bdist, CV_8UC1, 255/maxval, 1);
pow(abs(Adist-Bdist),p,Z);
return (pow(sum(Z).val[0]/nelem, 1/p));
}