現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::射影幾何学
関連:OpenCV::ホモグラフィ

射影幾何学


「ワールド座標系(X,Y,Z)」の点Pを「スクリーン座標系(x,y)」に対応させる事を
「投影変換(Projective Transform)」という。

一般に幾何変換をする時、同次座標(homogeneous座標)を使うと便利である。

つまり、
  • (x,y)→(x,y,w)
  • (x,y,z)→(x,y,z,w)
のように次元を1つあげる。


※ワールド座標系P(X,Y,Z)、スクリーン座標系p(x,y)、カメラの内部パラメータ行列M(3×3)とすると



とまとまる(らしい)。(関連リンクHeikkila)



OpenCVでは、現在の座標の次元を1つあげる関数がある。
追加された次元には、「1」が設定される。

[例]:5つの点の2D座標を3D座標にあげる

#include <iostream>
#include <cv.h>
#include <highgui.h>

//------------ 2D座標 -------------//
double CoordIn[5][2]={
	{100,100},
	{50,50},
	{200,200},
	{400,400},
	{30,30}
};
const int N = 5;//(5点)

//----------- ここからメイン関数 ---------------//
int main(int argc, char *argv[])
{
	
	CvMat *Pin = cvCreateMat(N,2,CV_64FC1);
	cvSetData(Pin,CoordIn,Pin->step);

	CvMat *Pout = cvCreateMat(N,3,CV_64FC1);


	cvConvertPointsHomogeneous(Pin,Pout);//変換

	for(int y = 0; y < N;++y){
		for(int x = 0; x < 3;++x)
		{
			std::cout << CV_MAT_ELEM(*Pout,double,y,x) << " ";
		}
		std::cout << "\n";
	}

	cvReleaseMat(&Pin);
	cvReleaseMat(&Pout);

	return EXIT_SUCCESS;
}

メモ


次元変換は、
  • 「1次元上げる」、
  • 「そのまま」、
  • 「1次元下げる」
の3つの変換が可能。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます