Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions modules/mcc/include/opencv2/mcc/checker_model.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ enum TYPECHART
MCC24 = 0, ///< Standard Macbeth Chart with 24 squares
SG140, ///< DigitalSG with 140 squares
VINYL18, ///< DKK color chart with 12 squares and 6 rectangle
SPYDERCHECKR48_V2, // 6x8 = 48 squares
SPYDERCHECKR24_V2 // 6x4 = 24 squares


};

Expand Down
47 changes: 47 additions & 0 deletions modules/mcc/src/checker_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,55 @@ CChartModel::CChartModel(const TYPECHART chartType)
chart.resize(size.area(), std::vector<float>(9));
for(int color = 0 ; color < (int)chart.size() ; color++)
chart[color].assign(CChartVinylColors[color] , CChartVinylColors[color] + 9 );

break;
case SPYDERCHECKR48_V2: // SpyderCheckr 48 (v2)
size = cv::Size2i(6, 8);
boxsize = cv::Size2f(16.75f, 22.25f);
box.resize(4);
box[0] = cv::Point2f(0.00f, 0.00f);
box[1] = cv::Point2f(22.25f, 0.00f);
box[2] = cv::Point2f(22.25f, 16.75f);
box[3] = cv::Point2f(0.00f, 16.75f);

cellchart.assign(CSpyder48Cellchart, CSpyder48Cellchart + 4 * 48);
center.assign(CSpyder48Center, CSpyder48Center + 48);

chart.resize(size.area(), std::vector<float>(9));
for (int color = 0; color < (int)chart.size(); color++)
chart[color].assign(CSpyder48Colors[color], CSpyder48Colors[color] + 9);

break;
case SPYDERCHECKR24_V2:
{
CChartModel full(SPYDERCHECKR48_V2);
size = cv::Size2i(6, 4); // 4x6 = 24
boxsize = full.boxsize;
box = full.box;

cellchart.clear();
center.clear();
chart.clear();

const int rows = full.size.width;
const int cols = full.size.height;

for (int r = 0; r < rows; r++)
{
for (int c = 4; c < 8; c++)
{
int idxFull = r * cols + c;

for (int k = 0; k < 4; k++)
cellchart.push_back(full.cellchart[4 * idxFull + k]);

center.push_back(full.center[idxFull]);
chart.push_back(full.chart[idxFull]);
}
}

break;
}
}
}

Expand Down
140 changes: 140 additions & 0 deletions modules/mcc/src/dictionary.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1181,6 +1181,146 @@ const cv::Point2f CChartVinylCenter[18] = {

};

const float CSpyder48Colors[48][9] = {
{210,121,117, 61.35f, 34.81f, 18.38f, -1,-1,-1},
{218,203,201, 82.68f, 5.03f, 3.02f, -1,-1,-1},
{237,206,186, 85.42f, 9.41f, 14.49f, -1,-1,-1},
{241,233,229, 92.72f, 1.89f, 2.76f, -1,-1,-1},
{249,242,238, 96.04f, 2.16f, 2.60f, -1,-1,-1},
{ 0,127,159, 47.12f,-32.50f,-28.75f, -1,-1,-1},
{222,118, 32, 60.94f, 38.21f, 61.31f, -1,-1,-1},
{ 98,187,166, 70.19f,-31.90f, 1.98f, -1,-1,-1},

{216,179, 90, 75.50f, 5.84f, 50.42f, -1,-1,-1},
{203,205,196, 82.25f, -2.42f, 3.78f, -1,-1,-1},
{211,175,133, 74.28f, 9.05f, 27.21f, -1,-1,-1},
{229,222,220, 88.85f, 1.59f, 2.27f, -1,-1,-1},
{202,198,195, 80.44f, 1.17f, 2.05f, -1,-1,-1},
{192, 75,145, 50.49f, 53.45f,-13.55f, -1,-1,-1},
{ 58, 88,159, 37.80f, 7.30f,-43.04f, -1,-1,-1},
{126,125,174, 54.38f, 8.84f,-25.71f, -1,-1,-1},

{127,175,120, 66.82f,-25.10f, 23.47f, -1,-1,-1},
{206,203,208, 82.29f, 2.20f, -2.04f, -1,-1,-1},
{193,149, 91, 64.57f, 12.39f, 37.24f, -1,-1,-1},
{182,178,176, 73.42f, 0.99f, 1.89f, -1,-1,-1},
{161,157,154, 65.52f, 0.69f, 1.86f, -1,-1,-1},
{245,205, 0, 83.61f, 3.36f, 87.02f, -1,-1,-1},
{195, 79, 95, 49.81f, 48.50f, 15.76f, -1,-1,-1},
{ 82,106, 60, 42.03f,-15.80f, 22.93f, -1,-1,-1},

{ 66,157,179, 60.53f,-22.60f,-20.40f, -1,-1,-1},
{ 66, 57, 58, 24.89f, 4.43f, 0.78f, -1,-1,-1},
{139, 93, 61, 44.49f, 17.23f, 26.24f, -1,-1,-1},
{139,136,135, 57.15f, 0.57f, 1.19f, -1,-1,-1},
{122,118,116, 49.62f, 0.58f, 1.56f, -1,-1,-1},
{186, 26, 51, 41.05f, 60.75f, 31.17f, -1,-1,-1},
{ 83, 58,106, 28.88f, 19.36f,-24.48f, -1,-1,-1},
{ 87,120,155, 48.82f, -5.11f,-23.08f, -1,-1,-1},

{116,147,194, 59.66f, -2.03f,-28.46f, -1,-1,-1},
{ 54, 61, 56, 25.16f, -3.88f, 2.13f, -1,-1,-1},
{ 74, 55, 46, 25.29f, 7.95f, 8.87f, -1,-1,-1},
{100, 99, 97, 41.57f, 0.24f, 1.45f, -1,-1,-1},
{ 80, 80, 78, 33.55f, 0.35f, 1.40f, -1,-1,-1},
{ 57,146, 64, 54.14f,-40.80f, 34.75f, -1,-1,-1},
{157,188, 54, 72.45f,-23.60f, 60.47f, -1,-1,-1},
{197,145,125, 65.10f, 18.14f, 18.68f, -1,-1,-1},

{190,121,154, 59.15f, 30.83f, -5.72f, -1,-1,-1},
{ 63, 60, 69, 26.13f, 2.61f, -5.03f, -1,-1,-1},
{ 57, 54, 56, 22.67f, 2.11f, -1.10f, -1,-1,-1},
{ 63, 61, 62, 25.65f, 1.24f, 0.05f, -1,-1,-1},
{ 43, 41, 43, 16.91f, 1.43f, -0.81f, -1,-1,-1},
{ 25, 55,135, 24.75f, 13.78f,-49.48f, -1,-1,-1},
{236,158, 25, 71.65f, 23.74f, 72.28f, -1,-1,-1},
{112, 76, 60, 36.13f, 14.15f, 15.78f, -1,-1,-1},
};

// SpyderCheckr 48 (v2) geometry (8 cols x 6 rows)
const cv::Point2f CSpyder48Cellchart[4 * 48] = {
// Row 0 (y = 0.25 .. 2.75)
{0.25f, 0.25f}, {2.75f, 0.25f}, {2.75f, 2.75f}, {0.25f, 2.75f},
{3.00f, 0.25f}, {5.50f, 0.25f}, {5.50f, 2.75f}, {3.00f, 2.75f},
{5.75f, 0.25f}, {8.25f, 0.25f}, {8.25f, 2.75f}, {5.75f, 2.75f},
{8.50f, 0.25f}, {11.00f, 0.25f}, {11.00f, 2.75f}, {8.50f, 2.75f},
{11.25f, 0.25f}, {13.75f, 0.25f}, {13.75f, 2.75f}, {11.25f, 2.75f},
{14.00f, 0.25f}, {16.50f, 0.25f}, {16.50f, 2.75f}, {14.00f, 2.75f},
{16.75f, 0.25f}, {19.25f, 0.25f}, {19.25f, 2.75f}, {16.75f, 2.75f},
{19.50f, 0.25f}, {22.00f, 0.25f}, {22.00f, 2.75f}, {19.50f, 2.75f},

// Row 1 (y = 3.00 .. 5.50)
{0.25f, 3.00f}, {2.75f, 3.00f}, {2.75f, 5.50f}, {0.25f, 5.50f},
{3.00f, 3.00f}, {5.50f, 3.00f}, {5.50f, 5.50f}, {3.00f, 5.50f},
{5.75f, 3.00f}, {8.25f, 3.00f}, {8.25f, 5.50f}, {5.75f, 5.50f},
{8.50f, 3.00f}, {11.00f, 3.00f}, {11.00f, 5.50f}, {8.50f, 5.50f},
{11.25f, 3.00f}, {13.75f, 3.00f}, {13.75f, 5.50f}, {11.25f, 5.50f},
{14.00f, 3.00f}, {16.50f, 3.00f}, {16.50f, 5.50f}, {14.00f, 5.50f},
{16.75f, 3.00f}, {19.25f, 3.00f}, {19.25f, 5.50f}, {16.75f, 5.50f},
{19.50f, 3.00f}, {22.00f, 3.00f}, {22.00f, 5.50f}, {19.50f, 5.50f},

// Row 2 (y = 5.75 .. 8.25)
{0.25f, 5.75f}, {2.75f, 5.75f}, {2.75f, 8.25f}, {0.25f, 8.25f},
{3.00f, 5.75f}, {5.50f, 5.75f}, {5.50f, 8.25f}, {3.00f, 8.25f},
{5.75f, 5.75f}, {8.25f, 5.75f}, {8.25f, 8.25f}, {5.75f, 8.25f},
{8.50f, 5.75f}, {11.00f, 5.75f}, {11.00f, 8.25f}, {8.50f, 8.25f},
{11.25f, 5.75f}, {13.75f, 5.75f}, {13.75f, 8.25f}, {11.25f, 8.25f},
{14.00f, 5.75f}, {16.50f, 5.75f}, {16.50f, 8.25f}, {14.00f, 8.25f},
{16.75f, 5.75f}, {19.25f, 5.75f}, {19.25f, 8.25f}, {16.75f, 8.25f},
{19.50f, 5.75f}, {22.00f, 5.75f}, {22.00f, 8.25f}, {19.50f, 8.25f},

// Row 3 (y = 8.50 .. 11.00)
{0.25f, 8.50f}, {2.75f, 8.50f}, {2.75f, 11.00f}, {0.25f, 11.00f},
{3.00f, 8.50f}, {5.50f, 8.50f}, {5.50f, 11.00f}, {3.00f, 11.00f},
{5.75f, 8.50f}, {8.25f, 8.50f}, {8.25f, 11.00f}, {5.75f, 11.00f},
{8.50f, 8.50f}, {11.00f, 8.50f}, {11.00f, 11.00f}, {8.50f, 11.00f},
{11.25f, 8.50f}, {13.75f, 8.50f}, {13.75f, 11.00f}, {11.25f, 11.00f},
{14.00f, 8.50f}, {16.50f, 8.50f}, {16.50f, 11.00f}, {14.00f, 11.00f},
{16.75f, 8.50f}, {19.25f, 8.50f}, {19.25f, 11.00f}, {16.75f, 11.00f},
{19.50f, 8.50f}, {22.00f, 8.50f}, {22.00f, 11.00f}, {19.50f, 11.00f},

// Row 4 (y = 11.25 .. 13.75)
{0.25f, 11.25f}, {2.75f, 11.25f}, {2.75f, 13.75f}, {0.25f, 13.75f},
{3.00f, 11.25f}, {5.50f, 11.25f}, {5.50f, 13.75f}, {3.00f, 13.75f},
{5.75f, 11.25f}, {8.25f, 11.25f}, {8.25f, 13.75f}, {5.75f, 13.75f},
{8.50f, 11.25f}, {11.00f, 11.25f}, {11.00f, 13.75f}, {8.50f, 13.75f},
{11.25f, 11.25f}, {13.75f, 11.25f}, {13.75f, 13.75f}, {11.25f, 13.75f},
{14.00f, 11.25f}, {16.50f, 11.25f}, {16.50f, 13.75f}, {14.00f, 13.75f},
{16.75f, 11.25f}, {19.25f, 11.25f}, {19.25f, 13.75f}, {16.75f, 13.75f},
{19.50f, 11.25f}, {22.00f, 11.25f}, {22.00f, 13.75f}, {19.50f, 13.75f},

// Row 5 (y = 14.00 .. 16.50)
{0.25f, 14.00f}, {2.75f, 14.00f}, {2.75f, 16.50f}, {0.25f, 16.50f},
{3.00f, 14.00f}, {5.50f, 14.00f}, {5.50f, 16.50f}, {3.00f, 16.50f},
{5.75f, 14.00f}, {8.25f, 14.00f}, {8.25f, 16.50f}, {5.75f, 16.50f},
{8.50f, 14.00f}, {11.00f, 14.00f}, {11.00f, 16.50f}, {8.50f, 16.50f},
{11.25f, 14.00f}, {13.75f, 14.00f}, {13.75f, 16.50f}, {11.25f, 16.50f},
{14.00f, 14.00f}, {16.50f, 14.00f}, {16.50f, 16.50f}, {14.00f, 16.50f},
{16.75f, 14.00f}, {19.25f, 14.00f}, {19.25f, 16.50f}, {16.75f, 16.50f},
{19.50f, 14.00f}, {22.00f, 14.00f}, {22.00f, 16.50f}, {19.50f, 16.50f},
};

const cv::Point2f CSpyder48Center[48] = {
// Row 0 (y = 1.50)
{1.50f, 1.50f}, {4.25f, 1.50f}, {7.00f, 1.50f}, {9.75f, 1.50f},
{12.50f, 1.50f}, {15.25f, 1.50f}, {18.00f, 1.50f}, {20.75f, 1.50f},
// Row 1 (y = 4.25)
{1.50f, 4.25f}, {4.25f, 4.25f}, {7.00f, 4.25f}, {9.75f, 4.25f},
{12.50f, 4.25f}, {15.25f, 4.25f}, {18.00f, 4.25f}, {20.75f, 4.25f},
// Row 2 (y = 7.00)
{1.50f, 7.00f}, {4.25f, 7.00f}, {7.00f, 7.00f}, {9.75f, 7.00f},
{12.50f, 7.00f}, {15.25f, 7.00f}, {18.00f, 7.00f}, {20.75f, 7.00f},
// Row 3 (y = 9.75)
{1.50f, 9.75f}, {4.25f, 9.75f}, {7.00f, 9.75f}, {9.75f, 9.75f},
{12.50f, 9.75f}, {15.25f, 9.75f}, {18.00f, 9.75f}, {20.75f, 9.75f},
// Row 4 (y = 12.50)
{1.50f, 12.50f}, {4.25f, 12.50f}, {7.00f, 12.50f}, {9.75f, 12.50f},
{12.50f, 12.50f}, {15.25f, 12.50f}, {18.00f, 12.50f}, {20.75f, 12.50f},
// Row 5 (y = 15.25)
{1.50f, 15.25f}, {4.25f, 15.25f}, {7.00f, 15.25f}, {9.75f, 15.25f},
{12.50f, 15.25f}, {15.25f, 15.25f}, {18.00f, 15.25f}, {20.75f, 15.25f},
};

} // namespace mcc
} // namespace cv

Expand Down
23 changes: 22 additions & 1 deletion modules/mcc/test/test_mcc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,20 @@ TEST(CV_mccRunCCheckerDrawTest, accuracy_VINYL18)
pChecker->setBox({{0, 0}, {480, 0}, {480, 640}, {0, 640}});
runCCheckerDraw(pChecker, 640, 480, 18);
}
TEST(CV_mccRunCCheckerDrawTest, accuracy_SPYDERCHECKR24_V2)
{
Ptr<CChecker> pChecker = CChecker::create();
pChecker->setTarget(SPYDERCHECKR24_V2);
pChecker->setBox({{0, 0}, {480, 0}, {480, 640}, {0, 640}});
runCCheckerDraw(pChecker, 640, 480, 24);
}
TEST(CV_mccRunCCheckerDrawTest, accuracy_SPYDERCHECKR48_V2)
{
Ptr<CChecker> pChecker = CChecker::create();
pChecker->setTarget(SPYDERCHECKR48_V2);
pChecker->setBox({{0, 0}, {480, 0}, {480, 640}, {0, 640}});
runCCheckerDraw(pChecker, 640, 480, 48);
}

/****************************************************************************************\
* Test detection works properly on the simplest images
Expand All @@ -75,11 +89,18 @@ TEST(CV_mccRunCCheckerDetectorBasic, accuracy_MCC24)
{
runCCheckerDetectorBasic("MCC24.png", MCC24);
}

TEST(CV_mccRunCCheckerDetectorBasic, accuracy_VINYL18)
{
runCCheckerDetectorBasic("VINYL18.png", VINYL18);
}
TEST(CV_mccRunCCheckerDetectorBasic, accuracy_SPYDERCHECKR24_V2)
{
runCCheckerDetectorBasic("Spyder24.png", SPYDERCHECKR24_V2);
}
TEST(CV_mccRunCCheckerDetectorBasic, accuracy_SPYDERCHECKR48_V2)
{
runCCheckerDetectorBasic("Spyder48.png", SPYDERCHECKR48_V2);
}

TEST(CV_mcc_ccm_test, detect_Macbeth)
{
Expand Down
Loading