これは、iOS と Mac OS の Core Image に関連している可能性があると思います。
Core Image で CIAreaHistogram + CIHistogramDisplayFilter を使用して、RGB ヒストグラムを表示することができます。RGB の代わりに LUMINANCE だけを個別に取得する方法はありますか?
これは、iOS と Mac OS の Core Image に関連している可能性があると思います。
Core Image で CIAreaHistogram + CIHistogramDisplayFilter を使用して、RGB ヒストグラムを表示することができます。RGB の代わりに LUMINANCE だけを個別に取得する方法はありますか?
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;
ヒストグラムを表示するためのソリューションは 100 通りあります。これは単純で (わずか 2 行のコード)、どこでも問題なく動作します。
カラー画像の輝度チャンネルのみを出力し、それをヒストグラム関連のフィルターに渡すことに...
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 フィルターにプラグインする方法がわからない場合は、その方法を学んでください。お見せできます。
はい、そしてとても美しいです。このアプリを使用すると、グラフの外観を作成するためのクイック スタートに加えて、Apple のフレームワークを使用するための Objective-C コードと、それをアプリに追加するための API を利用できます。
http://www.infragistics.com/products/ios
私も今、同じことをやっていますので、今後の展開が楽しみです。連絡を取り合ってください。