blob: 60040da33794927cb54508433d83601552e7aead (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#ifndef BundleAdjustment_H__
#define BundleAdjustment_H__
#include "Eye.h"
#include "../oo/ObjBase.h"
namespace meow {
/*!
* @brief 列舉每個 \c Eye 可以有哪些種類的移動
*/
enum EyesReferenceInfoFlags {
CAN_OFFSET = 0x01, //!< 平移
CAN_ROTATE = 0x02, //!< 旋轉
CAN_ZOOM = 0x04 //!< 改變焦距
};
/*!
* @brief 記住每個 \c Eye 的reference以及Flag
*/
template<class Pixel>
struct EyesReferenceInfo {
unsigned long flag; //!< Flag, 定義如EyesReferenceInfoFlags
Eye<Pixel> eye; //!< reference
/*!
* @brief constructor with nothing
*/
EyesReferenceInfo(): flag(0), eye() {
}
/*!
* @brief constructor with flag and an Eye object. Here we will let
* memember '.eye' reference from the specify paramter \c e
*/
EyesReferenceInfo(Eye<Pixel>& e, unsigned long f): flag(f), eye() {
eye.referenceFrom(e);
}
/*!
* @brief constructor with another EyesReferenceInfo
*/
EyesReferenceInfo(EyesReferenceInfo const& si): flag(si.flag), eye() {
eye.referenceFrom(si.eye);
}
/*!
* @brief desructor
*/
~EyesReferenceInfo() {
}
/*!
* @brief copy operator, still use reference method
*/
EyesReferenceInfo& operator=(EyesReferenceInfo const& e) {
flag = e.flag;
eye.referenceFrom(e.eye);
return *this;
}
};
/*!
* @brief 這邊定義Bundle-Adjustment就是利用一系列場景來反推算出\b 相機資訊
* (包含拍攝座標, 角度與焦距) 或是在已知相機資訊的情況下推算出底片中
* 物體如何移動.
*/
template<class Pixel>
class BundleAdjustment: public ObjBase {
protected:
BundleAdjustment() {
}
public:
virtual ~BundleAdjustment() {
}
/*!
* @brief 推算相機資訊
*
* @param [in] seq 給定一系列場景
* @return 成功與否
*/
virtual
bool adjustEyes(std::vector<EyesReferenceInfo<Pixel> > seq) const {
return false;
}
/*!
* @brief 推算場景中的物體資訊
*
* 會將fixedPoints2D推算倒fixedPoints3D
*
* @param [in] seq 一系列場景(這裡的場景是有時間先後順序的)
* @brief 成功與否
*/
virtual
bool adjustFixedPoints(std::vector<EyesReferenceInfo<Pixel> > seq) const {
return false;
}
};
} // meow
#endif // BundleAdjustment_H__
|