我相信这可能与iOS和Mac OS中的Core Image相关。
我能够在Core Image中使用CIAreaHistogram + CIHistogramDisplayFilter显示RGB直方图。有没有办法单独使用LUMINANCE而不是RGB?
答案 0 :(得分: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;
有一百种不同的解决方案用于显示直方图;这很简单(只需两行代码),无处不在,无处不在。
打开仅输出彩色图像的亮度通道,并将其传递给与直方图相关的滤镜...
您知道如何创建返回CIKernel(或CIColorKernel)对象输出的自定义Core Image过滤器吗?如果没有,你应该;而且,我很乐意为您提供易于理解的说明。
假设你这样做,这里是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));
}
以上是Apple开发人员最初编写的OpenGL ES代码;我修改它只显示亮度值。
同样:如果您不知道如何将内核插入到自定义Core Image过滤器中,请了解具体方法。我可以告诉你。
答案 1 :(得分:-2)
是的,也非常漂亮。这个应用程序将为您提供创建图表外观的快速入门,以及使用Apple框架及其API将其添加到您的应用程序的Objective-C代码:
http://www.infragistics.com/products/ios
我现在正在做同样的事情,所以我很想知道你是怎么过来的。请保持联系。