2017-05-06 70 views
1

CIDetector无法检测到最大的矩形。左图像是原始图像,右图像是矩形检测图像。它没有检测到完整的矩形。我该如何解决它?为什么CIDetector无法检测到最大的矩形?

Original Image-Detected Image

- (CIDetector *)highAccuracyRectangleDetector 
{ 
    static CIDetector *detector = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^
    { 
     detector = [CIDetector detectorOfType:CIDetectorTypeRectangle 
context:nil options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}]; 
    }); 
    return detector; 
} 

- (CIRectangleFeature *)_biggestRectangleInRectangles:(NSArray 
*)rectangles 
{ 
    if (![rectangles count]) return nil; 

    float halfPerimiterValue = 0; 

    CIRectangleFeature *biggestRectangle = [rectangles firstObject]; 

    for (CIRectangleFeature *rect in rectangles) 
    { 
     CGPoint p1 = rect.topLeft; 
     CGPoint p2 = rect.topRight; 
     CGFloat width = hypotf(p2.x - p1.x, p2.y - p1.y); 

     CGPoint p3 = rect.topLeft; 
     CGPoint p4 = rect.bottomLeft; 
     CGFloat height = hypotf(p4.x - p3.x, p4.y - p3.y); 
     CGFloat currentHalfPerimiterValue = (height)+(width); 
     _RectHeight = height; 
     _RectWidth = width; 
     if (halfPerimiterValue < currentHalfPerimiterValue) 
     { 

      halfPerimiterValue = currentHalfPerimiterValue; 
      biggestRectangle = rect; 
      NSLog(@"height %@", @(height)); 
      NSLog(@"width %@", @(width)); 
     } 
    } 

    return biggestRectangle; 
} 

回答

1

最后我加入CIDetectorAspectRatio解决了这个问题:@ 1.667,CIDetectorMaxFeatureCount:@ 5

- (CIDetector *)highAccuracyRectangleDetector 
{ 
    static CIDetector *detector = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^
    { 
      detector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:nil options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh, CIDetectorAspectRatio: @1.667, CIDetectorMaxFeatureCount: @5}]; 
    }); 
    return detector; 
}