Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SauvolaTresholding : public Algorithm {
- public:
- inline SauvolaTresholding() {
- k = 0.2;
- R = 128;
- };
- inline cv::Mat Run(const cv::Mat & image) {
- cv::Mat grayImg;
- cv::cvtColor(image, grayImg, cv::COLOR_BGR2GRAY);
- cv::Mat treshImg = grayImg.clone();
- for (int i = 1; i < grayImg.rows - 1; ++i)
- {
- for (int j = 1; j < grayImg.cols - 1; ++j)
- {
- float sum = grayImg.at<uchar>(i, j - 1) + grayImg.at<uchar>(i, j + 1) + grayImg.at<uchar>(i - 1, j - 1) + grayImg.at<uchar>(i + 1, j - 1) + grayImg.at<uchar>(i - 1, j + 1) + grayImg.at<uchar>(i + 1, j + 1) + grayImg.at<uchar>(i - 1, j) + grayImg.at<uchar>(i + 1, j);
- float av = sum / 9;
- float sigma = std::sqrt((std::pow(grayImg.at<uchar>(i, j - 1) - av, 2) + std::pow(grayImg.at<uchar>(i, j + 1) - av, 2) + std::pow(grayImg.at<uchar>(i - 1, j - 1) - av, 2) + std::pow(grayImg.at<uchar>(i + 1, j - 1) - av, 2) + std::pow(grayImg.at<uchar>(i - 1, j + 1) - av, 2) + std::pow(grayImg.at<uchar>(i + 1, j + 1) - av, 2) + std::pow(grayImg.at<uchar>(i - 1, j) - av, 2) + std::pow(grayImg.at<uchar>(i + 1, j) - av, 2)) / (9 - 1));
- if ( av*(1. + k*((sigma / R )- 1.)) >treshImg.at<uchar>(i, j) ){
- treshImg.at<uchar>(i, j) = 255}
- else{
- treshImg.at<uchar>(i, j) = 255}
- }
- }
- }
- return treshImg;
- }
- float k;
- float R;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement