/// Helper to compute the dispute resolution metric. /// Disputed blob resolution. The aim is to give the blob to the most /// appropriate boxfile box. Most of the time it is obvious, but if /// two boxfile boxes overlap significantly it is not. If a small boxfile /// box takes most of the blob, and a large boxfile box does too, then /// we want the small boxfile box to get it, but if the small box /// is much smaller than the blob, we don't want it to get it. /// Details of the disputed blob resolution: /// Given a box with area A, and a blob with area B, with overlap area C, /// then the miss metric is (A-C)(B-C)/(AB) and the box with minimum /// miss metric gets the blob. static double BoxMissMetric(const TBOX& box1, const TBOX& box2) { int overlap_area = box1.intersection(box2).area(); double miss_metric = box1.area()- overlap_area; miss_metric /= box1.area(); miss_metric *= box2.area() - overlap_area; miss_metric /= box2.area(); return miss_metric; }