3次元配列を指定した範囲で平均化

9 vues (au cours des 30 derniers jours)
naoya uwa
naoya uwa le 17 Sep 2020
Commenté : naoya uwa le 30 Sep 2020
ステレオカメラを用いて深度測定をする際に、サンプルを参考に3Dのポイントクラウドを生成するまでの流れは理解しました。
しかし、得られた三次元配列はデータ量が多いことや精度の問題から例えばX-Y座標において3×3の9ブロックに分けたときに、ブロックごとのZ軸の平均値を
取得する方法を教えていただきたい次第です。

Réponse acceptée

Atsushi Ohashi
Atsushi Ohashi le 25 Sep 2020
brockproc 関数とMean関数を組み合わせる方法があります。
3x3(9要素)のブロックごとにX,Y,Zのそれぞれの平均値を求めます。ステレオ画像で値がなかった画素は数値がNaNになっていると思いますので、平均値を求めるときにNaNは除外します。
ステレオ画像データは下記のサンプルを利用し、points3Dが求まっていることを前提します。
% 1つのブロックサイズ
blockSize = [3, 3];
% X, Y, Zの値を平均
% 1つ1つのブロックごとに平均値を求める関数を定義します
fun = @(block_struct) mean(block_struct.data, [1, 2], 'omitnan');
% ブロックごとに平均値を求めた値を出力します
points3D_mean = blockproc(points3D, blockSize, fun);
% RGBの値を平均
% 1つ1つのブロックごとに平均値を求める関数を定義します
fun = @(block_struct) uint8( round(mean(block_struct.data, [1, 2], 'omitnan')) );
% ブロックごとに平均値を求めた値を出力します
frameLeftRect_mean = blockproc(frameLeftRect, blockSize, fun);
ptCloud_mean = pointCloud(points3D_mean, 'Color', frameLeftRect_mean);
% 描画します
player3D_mean = pcplayer([-3, 3], [-3, 3], [0, 8], 'VerticalAxis', 'y', ...
'VerticalAxisDir', 'down');
view(player3D_mean, ptCloud_mean);
  1 commentaire
naoya uwa
naoya uwa le 30 Sep 2020
目的の内容で実行することが可能となりました。
ありがとうございました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 単一カメラとステレオ カメラのキャリブレーション dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!