カーネルルーチンルールのドキュメントでは、 'カーネルルーチンは、入力画像の対応するピクセルに逆マッピングを使用して出力ピクセルを計算します。このようにして、ほとんどのピクセル計算を他のものより自然に表現することはできますが、不可能ではないにしても、これを困難にする画像処理操作がいくつかあります。例えば、ヒストグラムを計算することは、ソース画像への逆マッピングとして記述することは困難である。CoreImage用のヒストグラムのようなカーネルフィルタを作成するにはどうすればよいですか?
しかし、リンゴは明らかにそれを行うCIAreaHistogram Core Image Filterを持っているので何とかしています。
私は与えられた制限でそれを行うには1個の理論的な方法を見ることができます:
あなたは256要素の赤チャンネルのヒストグラムを望んでいたとしましょう...
をあなたは256x1画素出力イメージを持っています。カーネル関数は、これらの256ピクセルのそれぞれに対して呼び出されます。カーネル関数は、呼び出されるたびに、そのピクセルの赤い値がそのバケットと一致しているかどうかをチェックし、カウンタをインクリメントする毎に、全画像内のすべてのピクセルを読み取る必要があります。その出力ピクセルの画像全体のすべてのピクセルで処理されると、ピクセルの総数で除算され、その出力ピクセル値がその計算された値に設定されます。問題は、それが実際に動作すると仮定すると、すべての入力ピクセルが256回アクセスされるため、これはひどく非効率的ですが、すべての出力ピクセルは1回だけ書き込まれます。
カーネルがすべてのINPUTピクセルに対して反復処理を行い、その値に基づいて出力ピクセルを更新する方法が最適な方法です。次に、入力ピクセルはそれぞれ1回だけ読み取られ、出力ピクセルは合計(入力幅)x(入力高さ)倍の合計で読み書きされる。
誰もこの種のフィルタを動作させる方法を知っていますか?明らかに、ヒストグラムを作成するためにリンゴから利用可能なフィルタがありますが、ヒストグラムのより限定された形式を行うために必要です。 (例えば、青いヒストグラムは、ある範囲内の赤い値を持つサンプルに限定されます)。