3次元配列を指定した範囲で平均化
11 views (last 30 days)
Show older comments
ステレオカメラを用いて深度測定をする際に、サンプルを参考に3Dのポイントクラウドを生成するまでの流れは理解しました。
しかし、得られた三次元配列はデータ量が多いことや精度の問題から例えばX-Y座標において3×3の9ブロックに分けたときに、ブロックごとのZ軸の平均値を
取得する方法を教えていただきたい次第です。
0 Comments
Accepted Answer
Atsushi Ohashi
on 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);
More Answers (0)
See Also
Categories
Find more on 単一カメラとステレオ カメラのキャリブレーション in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!