1 #include <Base/Common/BIASpragmaStart.hh>
2 #include "ImageCanvasCheckerboardExtract.hh"
3 #include <FeatureDetector/CheckerboardDetector.hh>
4 #include <FeatureDetector/CheckerboardDetectorCrossFilter.hh>
5 #include <Base/Image/ImageConvert.hh>
6 #include <Base/ImageUtils/ImageDraw.hh>
7 #include <Base/Image/ColourRGB.hh>
8 #include <Base/Geometry/HomgPoint2D.hh>
9 #include <Utils/IOUtils.hh>
10 #include <Base/Common/BIASpragmaEnd.hh>
23 bool bOnlyFourPointsGiven,
bool valid)
25 BIASERR(
"error: function of derived class should be called");
33 int sbarid, wxWindowID
id,
38 :
ImageCanvas(parent, sbar, sbarid, id, pos, size, style, name)
74 bool allCorners,
bool autoInvalidate)
86 coords.resize(numCorners, std::pair<float,float>(0.0f,0.0f));
127 for(
unsigned int i=0;i< coords.size();i++){
143 wxPostEvent(this->GetEventHandler(),pe);
154 double rescaleFactor){
162 BIASERR(
"Inconsistent number of corners:"<<corners.size()<<
" vs. "
166 for(
unsigned i=0;i<corners.size();i++)
174 double rescaleFactor){
177 for(
unsigned i=0;i<corners.size();i++)
183 if (detector >= 0 && detector <= 2)
196 OnLeftMouseButton(wxMouseEvent &event)
198 if(bSelectable_ && SelectCheckerboard_){
201 wxPoint pos =
event.GetPosition();
202 double x = dc.DeviceToLogicalX( pos.x );
203 double y = dc.DeviceToLogicalY( pos.y );
207 if(bEnforceAllCorners_){
208 allCheckerboardCorners_[NumLeftClicks_] = point;
209 if(NumLeftClicks_ == 0){
210 for(
unsigned i=1;i<allCheckerboardCorners_.size();i++)
211 allCheckerboardCorners_[i] =
HomgPoint2D(0.0,0.0,1.0);
215 DrawCheckerboardCorners_();
216 if(NumLeftClicks_ == xCorners_*yCorners_){
217 SelectCheckerboard_=
false;
218 DisplayCheckerboard_ =
true;
220 CallbackObj_->CheckerboardSelected(allCheckerboardCorners_,
false,
true);
224 if(NumLeftClicks_ == 0){
225 allCheckerboardCorners_[0] = point;
226 allCheckerboardCorners_[xCorners_-1]=pointZero;
227 allCheckerboardCorners_[(xCorners_*yCorners_-1)] =pointZero;
228 allCheckerboardCorners_[(yCorners_-1)*(xCorners_)] =pointZero;
230 else if (NumLeftClicks_ == 1){
231 allCheckerboardCorners_[xCorners_-1] = point;
233 else if (NumLeftClicks_ == 2){
234 allCheckerboardCorners_[(xCorners_*yCorners_-1)] = point;
236 else if (NumLeftClicks_ == 3){
237 allCheckerboardCorners_[(yCorners_-1)*(xCorners_)] = point;
241 if(NumLeftClicks_ == 4){
242 DrawCheckerboardCorners_();
243 SelectCheckerboard_=
false;
244 DisplayCheckerboard_ =
true;
246 CallbackObj_->CheckerboardSelected(allCheckerboardCorners_,
true,
true);
276 wxPostEvent(this->GetEventHandler(),pe);
299 wxPoint pos =
event.GetPosition();
300 int x = dc.DeviceToLogicalX( pos.x );
301 int y = dc.DeviceToLogicalY( pos.y );
327 unsigned char red[]={255, 0, 0};
328 unsigned char green[]={0,255, 0};
329 unsigned char blue[]={0,0,255};
352 else if(i==nrCorners)
366 unsigned int start[2], stop[2];
408 wxPostEvent(this->GetEventHandler(),pe);
417 BIASERR(
"error converting image");
class HomgPoint2D describes a point with 2 degrees of freedom in projective coordinates.
static int Compute(BIAS::Image< unsigned char > &img, const unsigned int &xCorners, const unsigned int &yCorners, t_CoordVecf &coords, const bool &saveDebugImage=false)
Detects a (recommended asymmetric) checkerboard pattern.
virtual void OnPaint(wxPaintEvent &event)
display image in wx application, provides zoom and investigation functionality
static int CircleCenterFilled(Image< StorageType > &im, unsigned int CenterX, unsigned int CenterY, unsigned int Radius, const StorageType Value[])
draws a filled circle using Value
std::vector< std::pair< float, float > > t_CoordVecf
helper vector of coordinates
unsigned int GetWidth() const
virtual ~ICECCallbackInterface()
static int Line(Image< StorageType > &im, const unsigned int start[2], const unsigned int end[2], const StorageType value[])
lines
color values, 3 channels, order: red,green,blue
virtual void CheckerboardSelected(std::vector< HomgPoint2D > &corners, bool bOnlyFourPointsGiven, bool valid=true)
this function should be overloaded
enum EColorModel GetColorModel() const
BIAS::Image< unsigned char > rgbim_
callback interface for ImageCanvasCheckerBoardExtract
static int Compute(const BIAS::Image< unsigned char > &img, const unsigned int &xCorners, const unsigned int &yCorners, t_CoordVecf &coords, const bool &saveDebugImage=false)
Detects a (recommended asymmetric) checkerboard pattern.
static int Convert(BIAS::ImageBase &source, BIAS::ImageBase &dest, enum BIAS::ImageBase::EColorModel targetColorModel, bool bPlanar=false)
main general conversion function, calls desired specialized functions, always initializes the destIma...
virtual void Show(BIAS::Image< unsigned char > &im, std::string name="")
static void Text(BIAS::Image< StorageType > &dstImg, const std::string &message, const int &posX=0, const int &posY=20, const ColourRGB< StorageType > &colorRGB=ColourRGB< StorageType >(255, 255, 255), const int fontface=1, const double hscale=1.0, const double vscale=1.0, const double shear=0, const int thickness=1, const int linetype=8)
OpenCV: Draw Text into image.
class BIASGeometryBase_EXPORT HomgPoint2D