![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
アフィン変換。 詳細...
#include <opencv2/core/affine.hpp>
公開型 | |
| typedef T | float_type |
| typedef Matx< float_type, 3, 3 > | Mat3 |
| typedef Matx< float_type, 4, 4 > | Mat4 |
| typedef Vec< float_type, 3 > | Vec3 |
公開メンバ関数 | |
| Affine3 () | |
| デフォルトコンストラクタ。4x4の単位行列を表す。 | |
| Affine3 (const float_type *vals) | |
| 16要素の配列から。 | |
| Affine3 (const Mat &data, const Vec3 &t=Vec3::all(0)) | |
| Affine3 (const Mat3 &R, const Vec3 &t=Vec3::all(0)) | |
| Affine3 (const Mat4 &affine) | |
| 拡張アフィン行列。 | |
| Affine3 (const Vec3 &rvec, const Vec3 &t=Vec3::all(0)) | |
| template<typename Y > | |
| Affine3< Y > | cast () const |
| Affine3 | concatenate (const Affine3 &affine) const |
| a.concatenate(affine) は affine * a と等価である。 | |
| Affine3 | inv (int method=cv::DECOMP_SVD) const |
| Mat3 | linear () const |
| void | linear (const Mat3 &L) |
| template<typename Y > | |
| operator Affine3< Y > () const | |
| Affine3 | rotate (const Mat3 &R) const |
| a.rotate(R) は Affine(R, 0) * a と等価である。 | |
| Affine3 | rotate (const Vec3 &rvec) const |
| a.rotate(rvec) は Affine(rvec, 0) * a と等価である。 | |
| Mat3 | rotation () const |
| void | rotation (const Mat &data) |
| void | rotation (const Mat3 &R) |
| void | rotation (const Vec3 &rvec) |
| Vec3 | rvec () const |
| Affine3 | translate (const Vec3 &t) const |
| a.translate(t) は Affine(E, t) * a と等価である。ここでEは単位行列である。 | |
| Vec3 | translation () const |
| void | translation (const Vec3 &t) |
静的公開メンバ関数 | |
| static Affine3 | Identity () |
| 4x4の単位変換を作成する。 | |
公開変数類 | |
| Mat4 | matrix |
アフィン変換。
4x4の同次変換行列 \(T\) を表す
\[T = \begin{bmatrix} R & t\\ 0 & 1\\ \end{bmatrix} \]
ここで \(R\) は3x3の回転行列、\(t\) は3x1の並進ベクトルである。
\(R\) は3x3の回転行列、または3x1の回転ベクトルのいずれかで指定できる。回転ベクトルはロドリゲスの公式によって3x3の回転行列に変換される。
まず軸 \(r\) まわりに回転角 \(|r|\) ラジアン(右手の法則)で回転し、次にベクトル \(t\) で並進する変換を表す行列 \(T\) を構築するには、次を使用できる
既に回転行列 \(R\) を持っている場合は、次を使用できる
\(T\) から回転行列 \(R\) を取り出すには、次を使用する
\(T\) から並進ベクトル \(t\) を取り出すには、次を使用する
\(T\) から回転ベクトル \(r\) を取り出すには、次を使用する
回転ベクトルから回転行列への写像は多対一であることに注意せよ。返される回転ベクトルは、行列を設定する際に使用したものと必ずしも一致しない。
2つの変換 \(T = T_1 * T_2\) がある場合は、次を使用する
\(T\) の逆変換を得るには、次を使用する
| T cv::Affine3< T >::float_type |
| Matx<float_type, 3, 3> cv::Affine3< T >::Mat3 |
| Matx<float_type, 4, 4> cv::Affine3< T >::Mat4 |
| Vec<float_type, 3> cv::Affine3< T >::Vec3 |
| cv::Affine3< T >::Affine3 | ( | ) |
デフォルトコンストラクタ。4x4の単位行列を表す。
| cv::Affine3< T >::Affine3 | ( | const Mat4 & | affine | ) |
拡張アフィン行列。
| cv::Affine3< T >::Affine3 | ( | const Mat3 & | R, |
| const Vec3 & | t = Vec3::all(0) ) |
結果として得られる4x4行列は次のとおり
\[ \begin{bmatrix} R & t\\ 0 & 1\\ \end{bmatrix} \]
| R | 3x3の回転行列。 |
| t | 3x1の並進ベクトル。 |
| cv::Affine3< T >::Affine3 | ( | const Vec3 & | rvec, |
| const Vec3 & | t = Vec3::all(0) ) |
ロドリゲスベクトル。
現在の行列の最終行は [0,0,0,1] に設定される。
| rvec | 3x1の回転ベクトル。その方向は回転軸を示し、その長さは回転角度をラジアンで示す(右手の法則を使用)。 |
| t | 3x1の並進ベクトル。 |
|
explicit |
上記のすべてのコンストラクタを統合する。dataの行列サイズとして4x4, 3x4, 3x3, 1x3, 3x1をサポートする。
dataが4x4でない場合、現在の行列の最終行は [0,0,0,1] に設定される。
| data | シングルチャンネル行列。4x4の場合、現在の行列にコピーされ、tは使用されない。3x4の場合、現在の行列の上部3x4にコピーされ、tは使用されない。3x3の場合、現在の行列の左上3x3部分にコピーされる。3x1または1x3の場合、回転ベクトルとして扱われ、ロドリゲスの公式を用いて3x3の回転行列が計算される。 |
| t | 3x1の並進ベクトル。dataが4x4でも3x4でもない場合にのみ使用される。 |
|
explicit |
16要素の配列から。
| Affine3 cv::Affine3< T >::concatenate | ( | const Affine3< T > & | affine | ) | const |
a.concatenate(affine) は affine * a と等価である。
|
static |
4x4の単位変換を作成する。
| Affine3 cv::Affine3< T >::inv | ( | int | method = cv::DECOMP_SVD | ) | const |
| Mat3 cv::Affine3< T >::linear | ( | ) | const |
| void cv::Affine3< T >::linear | ( | const Mat3 & | L | ) |
3x3行列Lを現在の行列の左上部分にコピーする
行列の左上3x3部分を設定する。残りの部分は影響を受けない。
| L | 3x3の行列。 |
| Affine3 cv::Affine3< T >::rotate | ( | const Mat3 & | R | ) | const |
a.rotate(R) は Affine(R, 0) * a と等価である。
| Affine3 cv::Affine3< T >::rotate | ( | const Vec3 & | rvec | ) | const |
a.rotate(rvec) は Affine(rvec, 0) * a と等価である。
| Mat3 cv::Affine3< T >::rotation | ( | ) | const |
| void cv::Affine3< T >::rotation | ( | const Mat & | data | ) |
上記の回転メソッドを統合する。dataの行列サイズとして3x3, 1x3, 3x1をサポートする。
行列の左上3x3部分を設定する。残りの部分は影響を受けない。
| data | シングルチャンネル行列。3x3行列の場合、現在の行列の左上3x3部分を設定する。1x3または3x1行列の場合、回転ベクトルとして使用される。ロドリゲスの公式を用いて回転行列が計算され、現在の行列の左上3x3部分を設定する。 |
| void cv::Affine3< T >::rotation | ( | const Mat3 & | R | ) |
回転行列。
回転行列を現在の行列の左上3x3部分にコピーする。現在の行列の残りの要素は変更されない。
| R | 3x3の回転行列。 |
| void cv::Affine3< T >::rotation | ( | const Vec3 & | rvec | ) |
ロドリゲスベクトル。
行列の左上3x3部分を設定する。残りの部分は影響を受けない。
| rvec | 3x1の回転ベクトル。その方向は回転軸を示し、その長さは回転角度をラジアンで示す(右手親指の規約を使用)。 |
| Vec3 cv::Affine3< T >::rvec | ( | ) | const |
ロドリゲスベクトル。
rotation(const Vec3& rvec) で設定したものと必ずしも同じではない。| Affine3 cv::Affine3< T >::translate | ( | const Vec3 & | t | ) | const |
a.translate(t) は Affine(E, t) * a と等価である。ここでEは単位行列である。
| Vec3 cv::Affine3< T >::translation | ( | ) | const |
| void cv::Affine3< T >::translation | ( | const Vec3 & | t | ) |
tを現在の行列の最終列の最初の3要素にコピーする
行列の右上3x1部分を設定する。残りの部分は影響を受けない。
| t | 3x1の並進ベクトル。 |
| Mat4 cv::Affine3< T >::matrix |