gpt4 book ai didi

ios - CIAreaHistogram + CIHistogramDisplayFilter 得到亮度直方图

转载 作者:行者123 更新时间:2023-11-28 17:51:52 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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;

显示直方图有一百种不同的解决方案;这很简单(只有两行代码),而且无处不在,完美无瑕。

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

您知道如何创建返回 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));
}

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

再次声明:如果您至少不知道如何将内核插入自定义 Core Image 过滤器,请学习如何操作。我可以告诉你。

关于ios - CIAreaHistogram + CIHistogramDisplayFilter 得到亮度直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com