2

我相信这可能与 iOS 和 Mac OS 中的 Core Image 相关。

我可以在 Core Image 中使用 CIAreaHistogram + CIHistogramDisplayFilter 来显示 RGB 直方图。有没有办法单独获得 LUMINANCE 而不是 RGB?

4

2 回答 2

1

如果您已经创建了 CIImage 对象 (ciImage),以下是如何生成直方图图像(iOS 和 Mac OS X):

ciImage = [CIFilter filterWithName:@"CIAreaHistogram" keysAndValues:kCIInputImageKey, ciImage, @"inputExtent", ciImage.extent, @"inputScale", [NSNumber numberWithFloat:1.0], @"inputCount", [NSNumber numberWithFloat:256.0], nil].outputImage;
ciImage = [CIFilter filterWithName:@"CIHistogramDisplayFilter" keysAndValues:kCIInputImageKey, ciImage, @"inputHeight", [NSNumber numberWithFloat:100.0], @"inputHighLimit", [NSNumber numberWithFloat:1.0], @"inputLowLimit", [NSNumber numberWithFloat:0.0], nil].outputImage;

显示直方图有一百种不同的解决方案。这很简单(只有两行代码),并且可以在任何地方完美运行。

仅输出彩色图像的亮度通道,并将其传递给直方图相关的过滤器......

你知道如何创建一个自定义 Core Image 过滤器来返回 CIKernel(或 CIColorKernel)对象的输出吗?如果没有,你应该;而且,我很乐意为您提供易于理解的说明。

假设你这样做了,这里的 OpenGL ES 代码将只返回它处理的图像的亮度值:

vec4 rgb2hsl(vec4 color)
{
    //Compute min and max component values
    float MAX = max(color.r, max(color.g, color.b));
    float MIN = min(color.r, min(color.g, color.b));

    //Make sure MAX > MIN to avoid division by zero later
    MAX = max(MIN + 1e-6, MAX);

    //Compute luminosity
    float l = (MIN + MAX) / 2.0;

    //Compute saturation
    float s = (l < 0.5 ? (MAX - MIN) / (MIN + MAX) : (MAX - MIN) / (2.0 - MAX - MIN));

    //Compute hue
    float h = (MAX == color.r ? (color.g - color.b) / (MAX - MIN) : (MAX == color.g ? 2.0 + (color.b - color.r) / (MAX - MIN) : 4.0 + (color.r - color.g) / (MAX - MIN)));
    h /= 6.0;
    h = (h < 0.0 ? 1.0 + h : h);

    return vec4(h, s, l, color.a);
}

kernel vec4 hsl(sampler image)
{
    //Get pixel from image (assume its alpha is 1.0 and don't unpremultiply)
    vec4 pixel = unpremultiply(sample(image, samplerCoord(image)));

    //Convert to HSL; only display luminance value
    return premultiply(vec4(vec3(rgb2hsl(pixel).b), 1.0));
}

以上是苹果开发者原创的OpenGL ES代码;我将其修改为仅显示亮度值。

再说一遍:如果您不知道如何将内核至少插入自定义 Core Image 过滤器,请学习如何。我可以给你看。

于 2015-07-19T05:50:37.657 回答
-2

是的,而且非常漂亮。这个应用程序将让您快速开始创建图表的外观,以及用于使用 Apple 框架的 Objective-C 代码及其用于将其添加到您的应用程序的 API:

http://www.infragistics.com/products/ios

我现在也在做同样的事情,所以我很想看看你的进展如何。请保持联络。

于 2015-07-21T05:53:29.797 回答