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

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

채택된 답변

Atsushi Ohashi
Atsushi Ohashi 2020년 9월 25일
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
naoya uwa
naoya uwa 2020년 9월 30일
目的の内容で実行することが可能となりました。
ありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 単一カメラとステレオ カメラのキャリブレーション에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!