Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TestCheckerDetectCF.cpp
1 /**
2  @file TestCheckerDetectCF
3  @brief Test the CrossFilter checkerboard detector on a synthetic checkerboard image
4  @ingroup g_tests
5  @author jordt
6  @date 11/2010
7 */
8 
9 #include <FeatureDetector/CheckerboardDetectorCrossFilter.hh>
10 #include <Base/ImageUtils/ImageDraw.hh>
11 
12 using namespace BIAS;
13 using namespace std;
14 
15 
16 /// Generate a checkerboard and run the CheckercoardDetectorCrossFilter on it.
17 int main(int argc, char* argv[]){
18 
19  // Generate a checkerboard image
20  Image<unsigned char> testImg;
21  testImg.Init(1024,768,3);
22  testImg.Clear();
23  unsigned char white[] = {255,255,255};
24  ImageDraw<unsigned char>::RectangleCornersFill(testImg,100,100,540,390,white);
25  unsigned char black[] = {0,0,0};
26  for (int row = 0; row < 3; row++)
27  for (int col = 0; col < 4; col++){
28  ImageDraw<unsigned char>::RectangleCornersFill(testImg,120+col*100,121+row*100,170+col*100,169+row*100,black);
29  if (row != 2)
30  ImageDraw<unsigned char>::RectangleCornersFill(testImg,170+col*100,171+row*100,220+col*100,219+row*100,black);
31  }
32 
33  // Detect corners
35  vector<HomgPoint2D> checkerCorners = cbd.GetCheckerboard(testImg,7,4,true);
36 
37  // Check if result is correct
38  int index = 0;
39  for (int y = 170; y <= 320; y+=50)
40  for (int x = 170; x <= 470; x+=50){
41  if ((int)checkerCorners[index][0] != x) return 1;
42  if ((int)checkerCorners[index++][1] != y) return 1;
43  }
44 
45  return 0;
46 }
Detects a checkerboard pattern (typically 7x4 inner corners, asymmetric layout recommended) in an ima...
std::vector< HomgPoint2D > GetCheckerboard(Image< unsigned char > img, int numberOfCols=7, int numberOfRows=4, bool upperLeftIsBlack=true)
Find a checkerboard of size numberOfCols x numberOfRows in the given image.
void Clear(const StorageType value=0)
sets all pixels to zero/value
Definition: Image.hh:289
void Init(unsigned int Width, unsigned int Height, unsigned int channels=1, enum EStorageType storageType=ST_unsignedchar, const bool interleaved=true)
calls Init from ImageBase storageType is ignored, just dummy argument
Definition: Image.cpp:421
static int RectangleCornersFill(Image< StorageType > &im, const int minx, const int miny, const int maxx, const int maxy, const StorageType value[])
Draws the filled rectangle defined by upper left and bottom right corner with value[i] in channel i...
Definition: ImageDraw.cpp:194