ステレオカメラによる深度測定

ステレオカメラによる深度測定を実施しておりますが、
ターゲット画像を読み込んで出力するとピクセル数が下がってしまいます。
これが原因で測定したい範囲が網羅できていないのですが、解決方法を教えてください。
(下記画像のワークスペースを参照ください。)
%ステレオ カメラのパラメーターの読み込み
% Load the stereoParameters object.
load('handshakeStereoParams.mat');
% Visualize camera extrinsics.
showExtrinsics(stereoParams);
%ビデオフレームの読み取りと平行化
frameLeft = imread('I1(left).jpg');
frameRight = imread('I2(right).jpg');
[frameLeftRect, frameRightRect] = ...
rectifyStereoImages(frameLeft, frameRight, stereoParams);
figure;
imshow(stereoAnaglyph(frameLeftRect, frameRightRect));
title('pit_fig');
%視差の計算
frameLeftGray = rgb2gray(frameLeftRect);
frameRightGray = rgb2gray(frameRightRect);
disparityMap = disparity(frameLeftGray, frameRightGray);
figure;
imshow(disparityMap, [0, 100]);
title('Disparity Map');
colormap jet
colorbar
%3次元シーン再構成
points3D = reconstructScene(disparityMap, stereoParams);
% Convert to meters and create a pointCloud object
points3D = points3D ./1000;
ptCloud = pointCloud(points3D, 'Color', frameLeftRect);
% Create a streaming point cloud viewer
player3D = pcplayer([-3, 3], [-3, 3], [0, 8], 'VerticalAxis', 'y', ...
'VerticalAxisDir', 'down');
% Visualize the point cloud
view(player3D, ptCloud);
MATLAB.png

 Accepted Answer

Kenta
Kenta on 9 Sep 2019

1 vote

入力画像のサイズより、キャリブレーション後のサイズが小さくなってしまっている、という意味で正しいでしょうか。
カメラパラメータが原因で、キャリブレーション後のほうが、サイズが小さくなってしまっているのではないでしょうか。カメラパラメータを変えれば、キャリブレーション後の画像サイズも変わると思います。
例えば、
figure;imshow(frameLeftRect)
で、確認した場合、入力画像と似たものが見えると思うのですが、いかがでしょうか。
その場合でも画像の一部が欠損していますか。

13 Comments

naoya uwa
naoya uwa on 10 Sep 2019
ご回答ありがとうございます。
記載いただきました、
figure;imshow(frameLeftRect)
のコードで表示しましたところ小さくなった画像(画像の下半分)が表示されました。
カメラパラメータにもリサイズするような項目が見当たらず、原因が掴め無い状況です。
レンズの歪などを考慮して、補正してもピクセル数に変化はなく、
例えば魚眼レンズなどを想定した場合、平行化した後4辺が内側に歪んだような結果が得られて、ブラックアウトした領域が増加しピクセル数に変化は無いと考えております。
以上
よろしくお願い申し上げます。
Kenta
Kenta on 10 Sep 2019
丁寧に返信いただき、ありがとうございます。状況がよくわかりました。
ぐしゃっと縦方向につぶされているのかと推測していましたがちがうようですね。失礼いたしました。
ちなみに、ステレオカメラはどのカメラ(ZEDなど)を使いましたか?
naoya uwa
naoya uwa on 10 Sep 2019
お返事ありがとうございます。
訂正ですが、下半分の画像と申しましたが、上半分の画像が出力されております。
ステレオカメラは、ソニーの1.6MのUSB産業用カメラのモノクロを2台物理的に固定して撮影した画像を使用しております。基線長は250mmです。
Kenta
Kenta on 10 Sep 2019
ありがとうございます。ステレオカメラのカメラパラメータの取得方法について聞かせてください。matlabのステレオカメラ用のキャリブレーションアプリを使いましたか?
naoya uwa
naoya uwa on 10 Sep 2019
こちらこそありがとうございます。
はい。MATLABのステレオキャリブレーションアプリを使用してステレオパラメータを求めました。
Kenta
Kenta on 10 Sep 2019
load('handshakeStereoParams.mat');に格納されている変数に、カメラ間距離があると思いますが、それは、実際の距離(250ミリですかね)と一致していますか?
カメラキャリブレーション用のパラメータがうまく計算できていないのではないかと思いました。また、チェッカーボードを撮影したかと思いますが、いろいろな角度から、十分な数(100枚、など)を撮られましたか?
ただ、カメラキャリブレーションがうまくいってなかったところで、下半分が消えるというのは起こるか、ということにも疑問に思っているところです...
naoya uwa
naoya uwa on 10 Sep 2019
load('handshakeStereoParams.mat');のどこに変更出来るところがあるか探して試させて頂こうと思います。
チェッカーボードに関してですが、30枚撮影しましたが、少ないでしょうか・・・。
またピクセル誤差の棒グラフがありますが、目標値としてはどの程度のものが何ペア必要かなどの知見もございましたらご教授願いたい次第です。
仰るように下半分が消えることに関して関係なさそうですが、精度を上げることと可能性をつぶしていければと考えております。
Kenta
Kenta on 10 Sep 2019
お手数をおかけしますが、カメラパラメータのファイルと、どの画像でもよいので、左右の画像を1枚ずつ添付していただくことは可能でしょうか。
naoya uwa
naoya uwa on 17 Sep 2019
回答が遅くなり申し訳ございません。
下記に画像を添付させて頂きます。
また、ステレオパラメータは添付の通りです。
以上
よろしくお願い申し上げます。
left_image
left1.jpg
right_image
right1.jpg
Kenta
Kenta on 17 Sep 2019
close all;clear;clc
frameLeft = imread('left1.jpeg');
frameRight = imread('right1.jpeg');
load('stereoParams.mat')
[frameLeftRect, frameRightRect] = ...
rectifyStereoImages(frameLeft, frameRight, stereoParams);
figure;imshowpair(frameLeft,frameLeftRect,'montage')
私のほうでは、問題なく、全部が表示されます。一度こちらを試してもらえますか。
naoya uwa
naoya uwa on 18 Sep 2019
ご回答ありがとうございます。
上記コードで動かしてみたところ、
stereoParams.matがありませんとエラーがでます。
handshakeStereoParams.matに書き換えると動きますが、やはり出力画像が小さくなってしまいます。
やはり、原因はこの関数にあるようですが、
handshakeStereoParams.mat
で試していただけないでしょうか。
以上
よろしくお願いいたします。
Kenta
Kenta on 18 Sep 2019
>>やはり原因はこの関数にあるようですが
そのエラーがでるのは、stereoParams.matが現在のパスにないからではないでしょうか。
質問のところでの添付画像で「現在のフォルダー」とありますが、そこに、stereoParames.matをおいて、再度実行いただけますか。
ちなみに、stereoParames.matとhandshakeStereoParames.matのちがいはなんでしょうか。
stereoParames.matは現在お使いのものでとったキャリブレーションファイルではないということでしょうか。
ひとまず、stereoParamesでは全体の画像が出ることを確認いただけると幸いです。
naoya uwa
naoya uwa on 20 Sep 2019
仰る通り、変更後実行できました。
handshakeを記載するとウェブから読み込んでくるようです。
ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Products

Asked:

on 9 Sep 2019

Commented:

on 20 Sep 2019

Community Treasure Hunt

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

Start Hunting!