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

HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度

1.RandomHue

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

需要先把rgb图转成hsv图,然后对第一个通道也就是h的通道的每个值加上delta,最后再换转成rgb图

void AdjustHue(const cv::Mat& in_img, const float delta, cv::Mat* out_img) {
if (fabs(delta) > ) {
// 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[].convertTo(channels[], -, , delta);
cv::merge(channels, *out_img); // Back to BGR colorspace.
cvtColor(*out_img, *out_img, CV_HSV2BGR);
} else {
*out_img = in_img;
}
}

2.RandomSaturation

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(, .f, .f, &prob);
if (prob < contrast_prob) {
CHECK_GE(upper, lower) << "contrast upper must be >= lower.";
CHECK_GE(lower, ) << "contrast lower must be non-negative.";
float delta;
caffe_rng_uniform(, lower, upper, &delta);
AdjustContrast(in_img, delta, out_img);
} else {
*out_img = in_img;
}
}

RandomSaturation做的是让通道里每个像素值乘以一个数,RandomHue是加一个数,这和RandomBrightness和RandomContrast的区别是一样的

void AdjustContrast(const cv::Mat& in_img, const float delta,
cv::Mat* out_img) {
if (fabs(delta - .f) > 1e-) {
in_img.convertTo(*out_img, -, delta, );
} else {
*out_img = in_img;
}
}

caffe RandomHue和RandomSaturation的更多相关文章

  1. 基于window7+caffe实现图像艺术风格转换style-transfer

    这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...

  2. caffe的python接口学习(7):绘制loss和accuracy曲线

    使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...

  3. 基于Caffe的Large Margin Softmax Loss的实现(中)

    小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文:  http://www.miao ...

  4. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  5. 基于Caffe的DeepID2实现(下)

    小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...

  6. 基于Caffe的DeepID2实现(中)

    小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...

  7. 基于Caffe的DeepID2实现(上)

    小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...

  8. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  9. 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练

    原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...

随机推荐

  1. java生成临时令牌和访问令牌

    public String getTicket(String logo, String productId) { String aTicket = ""; SimpleDateFo ...

  2. Mybatis学习笔记9 - 鉴别器discriminator

    鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为. 示例如下: DeptmentMapper接口定义: package com.mybatis.dao ...

  3. MVCC(Multi-Version Concurrency Control)多版本并发控制机

    MVCC(Multi-Version Concurrency Control)是一种多版本并发控制机制.

  4. free -m命令输出详解

    free -m输出有3行: Mem:表示物理内存 -/+ buffers/cached:表示物理内存缓存 Swap:表示硬盘交换分区 其中Mem中的total.used.free.shared.buf ...

  5. RTT学习

    一互斥量:是信号量的一种,用于共享资源的排他性使用,以锁的形式存在,初始化时为可用,不能在中断中使用,可能导致优先级翻转. 二 事件:创建.删除.初始化.解绑.等待.发送.可以一对多多对的,发送一个事 ...

  6. 打开/关闭网卡无线WIFI模块

    @echo off title ------(Please run as Administrators)Please select------ :begin echo ---------------- ...

  7. RadControl使用相同的Theme

    我們僅須對兩個地方加一些程式碼,就可使所有的RadControl擁用相的Theme,如此一下不但可使Ap內布景主題一致,設計者亦不需要對每個控件做字型,顏色,大小等等瑣碎的設計. App.Xaml.c ...

  8. ejs判断变量是否为空并输出

    在ejs里输出变量如下: <%=errmsg%> 但如果errmsg变量不存在则会报错:errmsg is undefined 我们可以改为: <%=locals.errmsg || ...

  9. 从零开始的全栈工程师——js篇2.19(BOM)

    一.BOM 浏览器对象模型 1.window.open(url,ways) url 是打开的网页地址ways 打开的方式 _self 2.window.close() 关闭当前页面 3.window. ...

  10. js有限状态机

    http://www.ruanyifeng.com/blog/2013/09/finite-state_machine_for_javascript.html 有限状态机(Finite-state m ...