3次元配列を指定した範囲で平均化
조회 수: 9 (최근 30일)
이전 댓글 표시
ステレオカメラを用いて深度測定をする際に、サンプルを参考に3Dのポイントクラウドを生成するまでの流れは理解しました。
しかし、得られた三次元配列はデータ量が多いことや精度の問題から例えばX-Y座標において3×3の9ブロックに分けたときに、ブロックごとのZ軸の平均値を
取得する方法を教えていただきたい次第です。
댓글 수: 0
채택된 답변
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);
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 単一カメラとステレオ カメラのキャリブレーション에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!