2016-08-25 5 views
0

matlabに2D畳み込みを行うオプションがあります。畳み込みが起こる各エリアを持つことができるように、使用することができます。たとえば、3x3畳み込みを行った場合は、各3x3ウィンドウの結果を保存して使用すると言うことができます。コマンドは次のようである:「同じ」キーワードは、私がこのような何かを行うことができますし、とにかく私が知りたいA. と同じサイズのコンボリューションの中央部分を返すことがあるだろうビットマップの特定の場所にレンダスクリプト畳み込みを使用する

X = conv2(A,B,'same'); 

アンドロイドでレンダスクリプトを使用していますか?私はあなたが私が意味するもののより良い控えを得ることができるように、MATLABのドキュメントから画像を入れます。再び画像はからです。は無料です。

The same keyword for a 2D convolution of matlab

+0

cmaster11 @あなたはそれを助けてくださいことができますか? – Shahryar

+0

@LarrySchieferできればそれを手伝ってもらえますか?あなたは、私がstackoverflowでレンダスクリプトの質問に答える数少ない人の一人です。 – Shahryar

+0

通知ありがとうございました:P – cmaster11

答えて

3

あなたはScript.LaunchOptionsクラスを使用することができます。

このクラスを使用すると、カーネルの実行の制限を設定できます。

:あなたは(そう、2次元で)、X -indexで始まる(0ベース、含む)データ3の「長方形」にカーネルを実行すると、xで終わります-index 8(排他的)と、制限は1122あるY側:

Script.LaunchOptions launchOptions; 
launchOptions = new Script.LaunchOptions(); 
launchOptions.setX(3, 8); 
launchOptions.setY(11, 22); 

// Kernel run 
myScript.forEach_myKernelName(inAlloc, outAlloc, launchOptions); 

:あなたが3ピクセル幅の境界線で、画像上にカーネルを適用します(例は直接FASTExampleサンプルプロジェクト):

Script.LaunchOptions fastLaunchOptions; 
fastLaunchOptions = new Script.LaunchOptions(); 
fastLaunchOptions.setX(3, inputImageSize.width - 3); 
fastLaunchOptions.setY(3, inputImageSize.height - 3); 

// ... 

scriptCFast.forEach_fastOptimized(
     grayAllocation, fastKpAllocation, fastLaunchOptions); 

// Define the convolution 
ScriptIntrinsicConvolve3x3 convolve3x3 = 
    ScriptIntrinsicConvolve3x3.create(mRS, Element.RGBA_8888(mRS)); 

// Some coefficients 
float[] coefficients = { 
     0.7f, 0, 0.5f, 
     0, 1.0f, 0, 
     0.5f, 0, 1.0f 
}; 
convolve3x3.setCoefficients(coefficients); 

// Execute the allocation with limits 
Script.LaunchOptions launchOptions; 
launchOptions = new Script.LaunchOptions(); 
launchOptions.setX(3, 8); 
launchOptions.setY(11, 22); 

convolve3x3.setInput(inputAllocation); 
convolve3x3.forEach(convolvedAllocation, launchOptions); 

:あなたが制限された範囲にわたりScriptIntrinsicConvolve3x3カーネルを適用するこのプロセスは、単に特定の範囲に渡ってカーネルを実行し、新しい、より小さい割り当てを作成するつもりはありません。

scriptC_main.set_inputAllocation(convolvedAllocation); 
scriptC_main.set_inputOffsetX(offsetX); 
scriptC_main.set_inputOffsetY(offsetY); 
scriptC_main.forEach_copyAllocation(outputAllocation); 

編集:で呼び出さ

// Store the input allocation 
rs_allocation inputAllocation; 

// Offset indices, which define the start point for 
// the copy in the input allocation. 
int inputOffsetX; 
int inputOffsetY; 

uchar4 __attribute__((kernel)) copyAllocation(int x, int y) { 

    return rsGetElementAt_uchar4(
     inputAllocation, x + inputOffsetX, y + inputOffsetY); 

} 

:だから、一定の制限上のカーネルを実行した後、次のようなコピーのカーネルを使用して、その結果をコピーする必要がありますI具体的にはexampleが作成され、次のプロセスが表示されます。

  • データセットの制限付き畳み込みの実行。
  • 畳み込み出力の新しい割り当てへのコピー。

参考:RenderScript: parallel computing on Android, the easy way

+0

なぜYの境界は11と22ですか?私に視覚化の答えを教えてもらえますか? – Shahryar

+0

そして重要なことは、すでにレンダスクリプトのために書かれている畳み込み3x3を使いたいということです。このlaunchoptionsでScriptIntrinsicを使用できますか? – Shahryar

+0

私は彼らが同じように動作すると仮定します;) – cmaster11

関連する問題