Created
December 13, 2016 07:03
-
-
Save arwer13/c58f0275c0923933295c7afbdd1a7da8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void train(cv::Mat &image) { | |
cv::cvtColor(image, image, CV_BGR2YCrCb); | |
const size_t w = image.cols; | |
const size_t h = image.rows; | |
double mean_cb = 0.0; | |
double mean_cr = 0.0; | |
double mean_cb2 = 0.0; | |
double mean_cr2 = 0.0; | |
double mean_crcb = 0.0; | |
double i = 1.0; | |
//TODO: #pragma omp parallel for | |
for (size_t x = 0; x < h; x++) { | |
const uchar* const row = image.ptr(x); | |
for (size_t y = 0; y < w; y++) { | |
const uchar cb = row[y*NUM_CHANNELS + 1]; | |
const uchar cr = row[y*NUM_CHANNELS + 2]; | |
// QUESTION: better not to play with inline functions here, yeah? | |
mean_cb = ((i-1.0)/i) * mean_cb + cb/i; | |
mean_cr = ((i-1.0)/i) * mean_cr + cr/i; | |
mean_cb2 = ((i-1.0)/i) * mean_cb2 + cb*cb/i; | |
mean_cr2 = ((i-1.0)/i) * mean_cr2 + cr*cr/i; | |
mean_crcb = ((i-1.0)/i) * mean_crcb + cr*cb/i; | |
i += 1.0; | |
} | |
} | |
// TODO: Mat cameraMatrix = (Mat_<double>(3,3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1); | |
cv::Mat cov(2, 2, CV_64F); | |
cov.at<double>(0, 0) = mean_cb2; | |
cov.at<double>(0, 1) = cov.at<double>(1, 0) = mean_crcb - mean_cb*mean_cr; | |
cov.at<double>(1, 1) = mean_cr2; | |
cov = cov.inv(); | |
cv::Mat means(1, 2, CV_64F); | |
means.at<double>(0, 0) = mean_cr; | |
means.at<double>(0, 1) = mean_cb; | |
write_model(MODEL_FILE_NAME, cov, means); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment