我相信这可能与 iOS 和 Mac OS 中的 Core Image 相关。
我可以在 Core Image 中使用 CIAreaHistogram + CIHistogramDisplayFilter 来显示 RGB 直方图。有没有办法单独获得 LUMINANCE 而不是 RGB?
我相信这可能与 iOS 和 Mac OS 中的 Core Image 相关。
我可以在 Core Image 中使用 CIAreaHistogram + CIHistogramDisplayFilter 来显示 RGB 直方图。有没有办法单独获得 LUMINANCE 而不是 RGB?
如果您已经创建了 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 过滤器,请学习如何。我可以给你看。
是的,而且非常漂亮。这个应用程序将让您快速开始创建图表的外观,以及用于使用 Apple 框架的 Objective-C 代码及其用于将其添加到您的应用程序的 API:
http://www.infragistics.com/products/ios
我现在也在做同样的事情,所以我很想看看你的进展如何。请保持联络。