2017-08-24 4 views
0

"output"と呼ばれるセル配列(2 x 6)があり、行1の各セルには1024 x 1024 x 100の行列が含まれています。行#1の各セルにムーデメディアを適用したい。私はこれは私がこれまでに出ているコードであるウィンドウサイズで3 = 5セル配列内にムービーメディアを適用する

output = cellfun(@movmedian(5,3), output,'uniform', 0); 

=次元でこの機能を適用したいと思います、しかし、それは「unbalencedまたは予期しない括弧やブラケット」を作り出しますエラー。このエラーの原因は不明です。私はまた、多少セル配列の行1にのみこの操作を実行するように指示する方法については不明です、助けて!

ありがとうございました!

答えて

2

の最初の引数として渡されたfunction handleは、各セルの内容(各3-Dマトリックス)に順番に渡されます。あなたもmovmedianで必要な追加のパラメータを渡す必要があるので、あなたはそうのようなanonymous functionを作成する必要があります。

@(m) movmedian(m, 5, 3) 

入力引数mは、3-D行列です。あなたがoutputの最初の行にこれを適用したい場合は、ちょうどそうようindex the cell arrayにあります

output(1, :) 

これは、「すべての列」を示す:で、outputの最初の行を含むセル配列を返します。変更された行列をoutputという同じセルに戻して保存する場合は、割り当て内に同じインデックスを使用できます。

output(1, :) = cellfun(@(m) movmedian(m, 5, 3), output(1, :),... 
         'UniformOutput', false); 

...と'UniformOutput', falseを指定することを避けるためにちょっとしたトリックはセル配列に無名関数の結果をカプセル化することです:すべて一緒にそれを置く

は、ここでのソリューションです

output(1, :) = cellfun(@(m) {movmedian(m, 5, 3)}, output(1, :)); 
+0

説明ありがとうございました! しかし、このコードを適用した後のセルのエントリは変更されていないようです... 1024×1024×19になると予想していましたが、1024×1024×100のままです。あなたはどう思いますか? – itend

+0

@itend:これは予想通りです。 'movmedian'は* sliding *ウィンドウを使用するので、ウィンドウは別のブロックに分割されたマトリックスとは重なり合うでしょう。 'movmedian'のための[additional arguments](https://www.mathworks.com/help/matlab/ref/movmedian.html#namevaluepairarguments)をチェックしてください。あなたの動作を変更するオプションがあります。画像処理ツールボックスにアクセスできる場合は、[別個のブロック処理](https://www.mathworks.com/help/images/performing-distinct-block-operations.html)もご覧ください。 – gnovice

+0

ああ、大丈夫!私はその説明を高く評価します。 – itend

関連する問題