1

3D マトリックスを平滑化する必要がありMます。平滑化の出力は ですS。matlab コードは次のようになります。

S = smooth3(M, 'box', 3); 

問題は、平滑化中にマトリックスの一部のみMを考慮する必要があることです。Aこれらの部品の位置を特定するためのマスクがあります。Aは と同じ大きさMで、 の値は1この点を考慮することを意味し、この点0を無視することを意味します。どうやってするか?

たとえば、次のようにMandがあるとAします。

M=zeros(7,7,7); M(2:6,2:6,2:6)=ones(5,5,5); M(4,4,4)=28;

A=zeros(7,7,7); A(2:6,2:6,2:6)=ones(5,5,5);

平滑化の後、次のような結果が必要です。

S=zeros(7,7,7); S(2:6,2:6,2:6)=smooth3(M(2:6,2:6,2:6), 'box', 3); 

matlabでマスクを使用してこの種のスムージングを行う方法を知っている人はいますか? 前もって感謝します。

4

1 に答える 1

0

私は解決策を見つけました:

index=find(A==0);
M(index) = 0;

k=ones(3,3,3);
counts = convn(A,k,'same');
sums = convn(M,k,'same');

S= sums ./counts .* A;

私はそれをテストしました。大丈夫そうです。

于 2013-10-28T10:44:08.590 に答える