class TC_ImageBase { public: virtual ~TC_ImageBase() {}; const TC_Transform2D& world2im() const; virtual int xlo() const =0; virtual int xhi() const =0; virtual int ylo() const =0; virtual int yhi() const =0; }; template<class T> class TC_Image : public TC_ImageBase { public: ... RD_Image<T>& image(); }
class TC_ImageToVectorBase { public: ... virtual void sample(RD_Vector& v, const TC_ImageBase& image, const RD_Array<RD_GmPoint>& pts) =0; // Warp image using pts and sample into v };
For instance:
class TC_RegionModel { public: TC_RegionModel(const TC_ImageToVectorBase&, const TC_VectorModelBase&, const TC_VTransformBase& normaliser); // Find b which best fit model to image given pts: void params(RD_Vector& b, RD_Vector& g_trans, const TC_ImageBase& image, const RD_Array<RD_GmPoint>& pts); // Reconstruct image given b and pts: void reconstruct(TC_ImageBase& image, const RD_Vector& b, const RD_Vector& g_trans, const RD_Array<RD_GmPoint>& pts); ... };