我想找到包含轮廓组的两个Canny检测器输出图像之间的Hausdorff距离,以找到两个Shape的相似性。为此,我需要找到Hausdorff距离估计。Opencv是否实现了此功能?我在《 Opencv API参考》中找到了此链接,但是我找不到在任何地方使用它的方法。谁能指导我如何使用此功能?
github上有一个很好的示例,但是您需要使用opencv3.0(master分支)。
实际上,hausdorff距离本身并不是一个大谜团,
// internal helper:
int distance_2( const std::vector<cv::Point> & a, const std::vector<cv::Point> & b )
{
int maxDistAB = 0;
for (size_t i=0; i<a.size(); i++)
{
int minB = 1000000;
for (size_t j=0; j<b.size(); j++)
{
int dx = (a[i].x - b[j].x);
int dy = (a[i].y - b[j].y);
int tmpDist = dx*dx + dy*dy;
if (tmpDist < minB)
{
minB = tmpDist;
}
if ( tmpDist == 0 )
{
break; // can't get better than equal.
}
}
maxDistAB += minB;
}
return maxDistAB;
}
double distance_hausdorff( const std::vector<cv::Point> & a, const std::vector<cv::Point> & b )
{
int maxDistAB = distance_2( a, b );
int maxDistBA = distance_2( b, a );
int maxDist = std::max(maxDistAB,maxDistBA);
return std::sqrt((double)maxDist);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句