2

これは、iOS と Mac OS の Core Image に関連している可能性があると思います。

Core Image で CIAreaHistogram + CIHistogramDisplayFilter を使用して、RGB ヒストグラムを表示することができます。RGB の代わりに LUMINANCE だけを個別に取得する方法はありますか?

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;

ヒストグラムを表示するためのソリューションは 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 フィルターにプラグインする方法がわからない場合は、その方法を学んでください。お見せできます。

于 2015-07-19T05:50:37.657 に答える
-2

はい、そしてとても美しいです。このアプリを使用すると、グラフの外観を作成するためのクイック スタートに加えて、Apple のフレームワークを使用するための Objective-C コードと、それをアプリに追加するための API を利用できます。

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

私も今、同じことをやっていますので、今後の展開が楽しみです。連絡を取り合ってください。

于 2015-07-21T05:53:29.797 に答える