112 lines
2.7 KiB
C++
112 lines
2.7 KiB
C++
/**
|
|
* This file is part of DSO.
|
|
*
|
|
* Copyright 2016 Technical University of Munich and Intel.
|
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
|
* for more information see <http://vision.in.tum.de/dso>.
|
|
* If you use this code, please cite the respective publications as
|
|
* listed on the above website.
|
|
*
|
|
* DSO is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* DSO is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "util/NumType.h"
|
|
|
|
#include "FullSystem/HessianBlocks.h"
|
|
namespace dso
|
|
{
|
|
|
|
|
|
struct ImmaturePointTemporaryResidual
|
|
{
|
|
public:
|
|
ResState state_state;
|
|
double state_energy;
|
|
ResState state_NewState;
|
|
double state_NewEnergy;
|
|
FrameHessian* target;
|
|
};
|
|
|
|
|
|
enum ImmaturePointStatus {
|
|
IPS_GOOD=0, // traced well and good
|
|
IPS_OOB, // OOB: end tracking & marginalize!
|
|
IPS_OUTLIER, // energy too high: if happens again: outlier!
|
|
IPS_SKIPPED, // traced well and good (but not actually traced).
|
|
IPS_BADCONDITION, // not traced because of bad condition.
|
|
IPS_UNINITIALIZED}; // not even traced once.
|
|
|
|
|
|
class ImmaturePoint
|
|
{
|
|
public:
|
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
|
// static values
|
|
float color[MAX_RES_PER_POINT];
|
|
float weights[MAX_RES_PER_POINT];
|
|
|
|
|
|
|
|
|
|
|
|
Mat22f gradH;
|
|
Vec2f gradH_ev;
|
|
Mat22f gradH_eig;
|
|
float energyTH;
|
|
float u,v;
|
|
FrameHessian* host;
|
|
int idxInImmaturePoints;
|
|
|
|
float quality;
|
|
|
|
float my_type;
|
|
|
|
float idepth_min;
|
|
float idepth_max;
|
|
ImmaturePoint(int u_, int v_, FrameHessian* host_, float type, CalibHessian* HCalib);
|
|
~ImmaturePoint();
|
|
|
|
ImmaturePointStatus traceOn(FrameHessian* frame, const Mat33f &hostToFrame_KRKi, const Vec3f &hostToFrame_Kt, const Vec2f &hostToFrame_affine, CalibHessian* HCalib, bool debugPrint=false);
|
|
|
|
ImmaturePointStatus lastTraceStatus;
|
|
Vec2f lastTraceUV;
|
|
float lastTracePixelInterval;
|
|
|
|
float idepth_GT;
|
|
|
|
double linearizeResidual(
|
|
CalibHessian * HCalib, const float outlierTHSlack,
|
|
ImmaturePointTemporaryResidual* tmpRes,
|
|
float &Hdd, float &bd,
|
|
float idepth);
|
|
float getdPixdd(
|
|
CalibHessian * HCalib,
|
|
ImmaturePointTemporaryResidual* tmpRes,
|
|
float idepth);
|
|
|
|
float calcResidual(
|
|
CalibHessian * HCalib, const float outlierTHSlack,
|
|
ImmaturePointTemporaryResidual* tmpRes,
|
|
float idepth);
|
|
|
|
private:
|
|
};
|
|
|
|
}
|
|
|