2

カスタム cifilter (Adobe のワープ フィルターなど) を作成しようとしています。少数のピクセル (ROI 内) のみをカーネル言語の他の場所に移動する方法は? 多分誰かが私にそれについての情報を提案してくれるでしょうか?カスタム cifilter の作成に関するすべての Apple ドキュメントを読みましたが、そのタイプのフィルターのカーネル部分の同様の例は見つかりませんでした。似たようなことを行う CIFilter がいくつかあります (CITwirlDistortion、CIBumpDistortion など)。たぶん、彼らのカーネルを見つけることができる場所はありますか?

4

1 に答える 1

5

これを逆に行う必要があります。これらの入力ピクセルを出力のこの位置に置きたいと言う代わりに、この出力ピクセルの入力のピクセルはどこにあるのかという質問に答える必要があります。

このカーネルを見てください:

kernel vec4 coreImageKernel(sampler image, float minX, float maxX, float shift)
{
    vec2 coord = samplerCoord( image );

    float x = coord.x;
    float inRange = compare( minX - x, compare( x - maxX, 1., 0. ), 0. );
    coord.x = coord.x + inRange * shift;
    return sample( image, coord );
}

これは、minX と maxX の間の縦縞を、ピクセルを右にシフトしたイメージの内容に置き換えます。このカーネルを minX = 100、maxX = 300、shift = 500 で使用すると、左下隅に画像が表示されます。オリジナルは右上。

最小 X = 100、最大 X = 300、シフト = 500

つまり、範囲内のピクセルを (minX + shift, maxX + shift) から (minX, maxX) に移動するという効果があります。

于 2013-05-04T10:51:56.153 に答える