魚眼画像、全方位画像の展開プログラミング

魚眼画像、全方位画像、を展開する構文を作りたいのですが、計算上は理解できているのですが、構文に起こせません。お教えいただけると幸いです。

10 Comments

Yoshio
Yoshio on 15 Oct 2019
Edited: Yoshio on 15 Oct 2019
ごちらに魚眼キャリブレーションについては記載があります。
ちなみに展開とはどのような意味でしょうか?また構文とはプログラムの事でしょうか?
以下を参考に、再度ご質問の内容を記載して頂けないでしょうか?
Takashi Ueno
Takashi Ueno on 16 Oct 2019
パノラマ展開を指しているのであれば、適当な画像中心と切り出し半径を定義し、画像中心からの各回転角thetaにおいて半径rhoを変化させた場合の極座標を算出し、直交座標系に変換して、適当に補間すればいけそうですが...。
データがあると、他の方も試しやすいかと思います。
takumi honda
takumi honda on 16 Oct 2019
コメントありがとうございます。 とても参考になります。 しかし、自分には知識が足りず、やりたいことは分かったのですが、それを実際に構文にできません。何か参考になる文献や、データがあれば教えていただきたいです。
takumi honda
takumi honda on 16 Oct 2019
Yosinoさん、コメントありがとうございます。 展開とは360度画像をパノラマ展開したいということです。構文はプログラムのことです。情報が抜けており申し訳ありません。
Yoshio
Yoshio on 16 Oct 2019
ありがとうございます。なるほど、魚眼レンズカメラで撮影された全方位画像をパノラマ展開するプログラムを作成したい、ということですね。このページの右上に関連すると思われるタグをつけましたので、英語で質問された関連質問と回答をご覧になれますので見ていただけますでしょうか。
Kenta
Kenta on 16 Oct 2019
Edited: Image Analyst on 16 Oct 2019
こんにちは、ちなみに、その魚眼画像や全方位画像は何という製品で撮影されていますか?
それともデジタルカメラに魚眼を装着し、撮影していますか?
Hi, By the way, do you have a fish-eye image? And the omnidirectional image is taken with what product?
Or do you shoot with a fisheye lens on your digital camera?
takumi honda
takumi honda on 17 Oct 2019
Kenta Itakura さん回答ありがとうございます。 ヴインストン株式会社の 品番 VSーC450MR-TK の全方位カメラ を使用しています。
Kenta
Kenta on 17 Oct 2019
Edited: Kenta on 17 Oct 2019
ありがとうございます。購入者にはソフトウェアが提供されるのでしょうか。そこで上の展開ができるかもしれません。また問い合わせると、購入者に限り、展開用のパラメータなどを教えてもらえるようです。上の件とはもしかしたら違うかもしれませんが。
Yoshio
Yoshio on 17 Oct 2019
Edited: Yoshio on 18 Oct 2019
Kenta Itakura さん、ありがとうございます。
魚眼カメラ(fish-eye camera)と全方位カメラ(omni-directional camera)とは別物、ということが分かりました。従って両者の画像上の点と3次元空間の対応関係式は異なりますが、ヴインストン株式会社の全方位カメラ の場合、以下のような情報があります。
他にも文献がありますね。
カメラの焦点距離と、ミラーの双曲面の形状を定義する定数パラメータは恐らくチェッカーボードを複数おいた画像を使えば推定できるのではないかと思います。
こちらに関連の情報があります。
ちなみにこの文献をたどると、結局魚眼キャリブレーションで利用されている同じ著者の
に行き着きます。
Kenta
Kenta on 19 Oct 2019
ありがとうございます。返信が遅れてしまい、申し訳ございません。
リンクの情報を教えていただき、ありがとうございます。いろいろと勉強させていただきました。

Sign in to comment.

 Accepted Answer

Takashi Ueno
Takashi Ueno on 16 Oct 2019

2 votes

興味があったのでちょっと作ってみましたが、こんな感じでしょうか?
雑にお絵描きして元画像を作ったので、結果も歪んでますが、参考にしていただければ。
使用した画像は添付しておきます。
clear
close all
I=imread('test.png');
I=rgb2gray(I);
figure
imshow(I)
% 切り出し中心
c=[190,198];
% 切り出し半径
R=175;
% 分割の角度数
angles=360;
% 極座標の設定
theta=linspace(0,2*pi,angles);
rho=1:R;
theta_array=kron(theta,ones(1,length(rho)));
rho_array=repmat(rho,1,angles);
% 極座標から直交座標に変換
[x,y]=pol2cart(theta_array,rho_array);
% 原点を画像中心から左上(1,1)にオフセット
x_f=x+c(2);
y_f=y+c(1);
% 直交座標は小数になるので、bilinearでの内挿を作成
F = griddedInterpolant(double(I));
% クエリ点の値の取得
I2=F(y_f',x_f');
% I2は1次元配列なのでreshape
I2=reshape(I2,length(x_f)/angles,angles);
figure
imshow(I2/255)

4 Comments

takumi honda
takumi honda on 17 Oct 2019
Edited: takumi honda on 22 Oct 2019
Takashi Uenoさん 回答ありがとうございます。 非常に参考になりました。 本当にありがとうございます。
追加でお伺いしたいのですが、一度グレースケール化するのはなぜでしょうか? カラーで表示がしたいと考えています。 知識不足で申し訳ありません。
Takashi Ueno
Takashi Ueno on 17 Oct 2019
上のコードは、レンズの光学的な特性は完全に無視して適当に展開しているだけなのでご注意ください。
そのあたりを考慮されたいのであれば、Kenta Itakuraさんがおっしゃるように、カメラのパラメータ等を使用することになるかと思いますので、やはりカメラメーカー様にお問い合わせいただくのがよいかと思います。
Kenta
Kenta on 19 Oct 2019
上に解説をいただき、ありがとうございます。
こちらのコード例について質問させていただけませんか。
Yoshio様よりご紹介いただいた、こちらのリンクhttps://www.youtube.com/watch?v=3IhXJR1ejeY
では透視投影変換の式が出てきていますが、こちらのコードではそのパラメータに関する情報がどれに対応しているのか追いきれませんでした。例えば、このリンクのa, b, cは、カメラのレンズの形(双曲線)を表していると思うのですが(こちらも不勉強で私の理解が間違っているかもしれません)、ここでは、きれいな半球のレンズを想定されている、ということでしょうか。
takumi honda
takumi honda on 21 Oct 2019
返信遅れてしまい申し訳ありません。きれいな半球レンズを想定しています

Sign in to comment.

More Answers (1)

takumi honda
takumi honda on 22 Oct 2019

0 votes

Takashi Uenoさん 追加でお伺いしたいのですが、一度グレースケール化するのはなぜでしょうか? カラーで表示がしたいと考えています。 知識不足で申し訳ありません。

2 Comments

Takashi Ueno
Takashi Ueno on 24 Oct 2019
極座標から直交座標系に変換した際、そこの画素値を求めるために補間を使用しています。
griddedInterpolantでの内挿の作成の際、チャンネルごとに行えばカラーでも問題ないです。座標は使いまわせるはずです。
私の場合、お絵描きで画像を作った際、グレースケールだけで作ったのですが、画像がRGBで出ていたのでグレースケール化しただけです。
takumi honda
takumi honda on 25 Oct 2019
ありがとうございます。

Sign in to comment.

Categories

Community Treasure Hunt

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

Start Hunting!