我正在寻找一个有助于检测照片清晰度的框架。我已阅读this post,其中指出了这样做的方法。但是我宁愿在图书馆工作,也不愿弄脏我的手。

苹果在Core Image的文档中说:



我该如何做“分析图像质量”部分?我很想看看一些示例代码。

最佳答案

我们使用这样的GPUimage框架(计算亮度和清晰度)来做到这一点:(以下一些片段可能会对您有所帮助)

-(BOOL) calculateBrightness:(UIImage *) image {
float result  = 0;
int i = 0;
for (int y = 0; y < image.size.height; y++) {
    for (int x = 0; x < image.size.width; x++) {
        UIColor *color = [self colorAt:image
                                   atX:x
                                  andY:y];
        const CGFloat * colors = CGColorGetComponents(color.CGColor);
        float r = colors[0];
        float g = colors[1];
        float b = colors[2];
        result += .299 * r + 0.587 * g + 0.114 * b;
        i++;
    }
}
float brightness = result / (float)i;
NSLog(@"Image Brightness : %f",brightness);
if (brightness > 0.8 || brightness < 0.3) {
    return NO;
}
return YES;

}
-(BOOL) calculateSharpness:(UIImage *) image {
GPUImageCannyEdgeDetectionFilter *filter = [[GPUImageCannyEdgeDetectionFilter alloc] init];
BinaryImageDistanceTransform *binImagTrans = [[BinaryImageDistanceTransform alloc] init ];
NSArray *resultArray = [binImagTrans twoDimDistanceTransform:[self getBinaryImageAsArray:[filter imageByFilteringImage:image]]];

if (resultArray == nil) {
    return NO;
}

int sum = 0;
for (int x = 0; x < resultArray.count; x++) {
    NSMutableArray *col = resultArray[x];
    sum += (int)[col valueForKeyPath:@"@max.intValue"];
}

// Values under analysis
NSLog(@"Image Sharp : %i",sum);
if (sum < 26250000) { // tested - bad sharpness is under ca. 26250000
    return NO;
}
return YES;

}

但这很慢。大约需要从iPad相机拍摄一张图像需要40秒。

10-08 06:27