27 #ifndef AALIGN_SIGNIFICANT 28 #define AALIGN_SIGNIFICANT 51 virtual void show()
const override;
52 virtual void run()
override;
64 refIndex(r), imgIndex(i), weight(w), merit(m), pose(p) {};
72 virtual void check()
const;
76 virtual std::vector<AlignmentEstimation>
align(
const T *ref,
const T *others) = 0;
77 virtual void updateRefs(T *refs,
const T *others,
const std::vector<Assignment> &assignments) = 0;
83 void updateRefXmd(
size_t refIndex, std::vector<Assignment> &images);
90 std::unique_ptr<T[]> data;
92 std::vector<float> rots;
93 std::vector<float> tilts;
94 std::vector<int> indexes;
96 std::vector<size_t> rowIds;
99 struct UpdateRefHelper {
101 std::vector<MetaDataVec> imgBlocks;
107 struct WeightCompHelper {
108 WeightCompHelper(
float c,
size_t ref,
size_t img) :
109 refIndex(ref), imgIndex(img), merit(c) {};
116 DataHelper m_imagesToAlign;
117 DataHelper m_referenceImages;
119 UpdateRefHelper m_updateHelper;
122 size_t m_noOfBestToKeep;
123 bool m_allowDataSwap;
124 bool m_useWeightInsteadOfCC;
126 std::vector<std::vector<float>> m_weights;
127 std::vector<Assignment> m_assignments;
131 template<
bool IS_REF>
132 void load(DataHelper &h);
134 template<
bool IS_ESTIMATION_TRANSPOSED>
135 void computeWeights(
const std::vector<AlignmentEstimation> &est);
136 template<
bool IS_ESTIMATION_TRANSPOSED>
137 void computeWeightsAndSave(
138 const std::vector<AlignmentEstimation> &est,
140 void computeWeightsAndSave(
141 std::vector<WeightCompHelper> &figsOfMerit,
143 template<
bool IS_ESTIMATION_TRANSPOSED,
bool USE_WEIGHT>
144 void computeAssignment(
145 const std::vector<AlignmentEstimation> &est);
146 template<
bool USE_WEIGHT>
147 void storeAlignedImages();
148 void fillRow(
MDRow &row,
154 void fillRow(
MDRow &row,
160 std::vector<float> &data,
161 size_t &pos,
float &val);
163 void updateSettings();
166 void checkLogDelete(
const FileName &fn);
169 inline int getRefMetaIndex(
size_t refIndex) {
170 return m_referenceImages.indexes.at(refIndex);
173 inline size_t getImgMetaIndex(
const MDRow &row,
size_t imgIndex) {
175 size_t index = imgIndex + 1;
181 inline void getImgRow(
MDRowVec &row,
size_t imgIndex) {
182 m_imagesToAlign.md.getRow(row, m_imagesToAlign.rowIds.at(imgIndex));
185 void validate(
const DataHelper &h,
bool isRefData);
Assignment(size_t r, size_t i, float w, float m, const Matrix2D< float > &p)
virtual void check() const
virtual void readParams() override
T & getValue(MDLabel label)
const Settings & getSettings()
virtual std::vector< AlignmentEstimation > align(const T *ref, const T *others)=0
virtual void defineParams() override
virtual void show() const override
void updateRefXmd(size_t refIndex, std::vector< Assignment > &images)
ctpl::thread_pool & getThreadPool()
virtual void run() override