caffe RandomHue和RandomSaturation

https://www.cnblogs.com/wangyblzu/p/5710715.htmlhtml

HSV和RGB同樣是一種圖像的顏色模型,h表示色調,s表示飽和度dom

 1.RandomHuespa

void RandomHue(const cv::Mat& in_img, cv::Mat* out_img, const float hue_prob, const float hue_delta) { float prob; caffe_rng_uniform(1, 0.f, 1.f, &prob); if (prob < hue_prob) {
   以必定機率進行色調調整 CHECK_GE(hue_delta,
0) << "hue_delta must be non-negative."; float delta; caffe_rng_uniform(1, -hue_delta, hue_delta, &delta); AdjustHue(in_img, delta, out_img); } else { *out_img = in_img; } }

須要先把rgb圖轉成hsv圖,而後對第一個通道也就是h的通道的每一個值加上delta,最後再換轉成rgb圖code

void AdjustHue(const cv::Mat& in_img, const float delta, cv::Mat* out_img) { if (fabs(delta) > 0) { // Convert to HSV colorspae.
    cv::cvtColor(in_img, *out_img, CV_BGR2HSV); // Split the image to 3 channels.
    vector<cv::Mat> channels; cv::split(*out_img, channels); // Adjust the hue.
    channels[0].convertTo(channels[0], -1, 1, delta); cv::merge(channels, *out_img); // Back to BGR colorspace.
    cvtColor(*out_img, *out_img, CV_HSV2BGR); } else { *out_img = in_img; } }

2.RandomSaturationorm

void RandomContrast(const cv::Mat& in_img, cv::Mat* out_img, const float contrast_prob, const float lower, const float upper) { float prob; caffe_rng_uniform(1, 0.f, 1.f, &prob); if (prob < contrast_prob) { CHECK_GE(upper, lower) << "contrast upper must be >= lower."; CHECK_GE(lower, 0) << "contrast lower must be non-negative."; float delta; caffe_rng_uniform(1, lower, upper, &delta); AdjustContrast(in_img, delta, out_img); } else { *out_img = in_img; } }

RandomSaturation作的是讓通道里每一個像素值乘以一個數,RandomHue是加一個數,這和 RandomBrightness和RandomContrast的區別是同樣的htm

void AdjustContrast(const cv::Mat& in_img, const float delta, cv::Mat* out_img) { if (fabs(delta - 1.f) > 1e-3) { in_img.convertTo(*out_img, -1, delta, 0); } else { *out_img = in_img; } }
相關文章
相關標籤/搜索