2012-02-28 6 views
3

私は現在、画像を平均化するための関数をMATLABに取り込んでいます。しかし、私は次のような行がはるかに単純なことができると思うが、私は方法がわからない。MATLABでの反復寸法の簡素化

centroidImage(:,:,1) = double(centroidImage(:,:,1)) ./ alphaImage; 
    centroidImage(:,:,2) = double(centroidImage(:,:,2)) ./ alphaImage; 
    centroidImage(:,:,3) = double(centroidImage(:,:,3)) ./ alphaImage; 

Iのようにそれを書く場合、私はエラーを取得する:(alphaImageは[Y、X]であり、centroidImageは[Y、X 3]である)の寸法が一致しないので

centroidImage = double(centroidImage) ./ alphaImage; 

centroidImage変数のサイズを反復するためのより簡単で効率的な方法はありませんか?明示的にそれらをすべて1つずつ記述する必要はありませんか?

答えて

4

あなたはこのためにbsxfunを使用することができます。

centroidImage = bsxfun(@rdivide,centroidImage,alphaImage); 
1

あなたはまた、alphaImageにrepmatを使用することができます。

centroidImage = double(centroidImage) ./ repmat(alphaImage,[1 1 3]); 
+0

確かに。しかし、古いMatlabのバージョンをサポートする必要がない場合を除き、 'bsxfun'はかなり便利であり、IIRCはより高速です。とにかく+1。 – Jonas

+0

@ジョナス、あなたは正しいです、私はあなたの答えがもっと好き、それは私によってupvotedされた真実を伝えるために:)ちょうど別のオプション –