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

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

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre 単一カメラとステレオ カメラのキャリブレーション en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!