caffe RandomBrightness和RandomContrast
1.
void RandomBrightness(const cv::Mat& in_img, cv::Mat* out_img,
const float brightness_prob, const float brightness_delta) {
float prob;
caffe_rng_uniform(, .f, .f, &prob);
if (prob < brightness_prob) {
CHECK_GE(brightness_delta, ) << "brightness_delta must be non-negative.";
float delta;
caffe_rng_uniform(, -brightness_delta, brightness_delta, &delta);
AdjustBrightness(in_img, delta, out_img);
} else {
*out_img = in_img;
}
}
void AdjustBrightness(const cv::Mat& in_img, const float delta,
cv::Mat* out_img) {
if (fabs(delta) > ) {
in_img.convertTo(*out_img, -, , delta);
} else {
*out_img = in_img;
}
}
opencv的convertTo的讲解:https://blog.csdn.net/qq_22764813/article/details/52135686
https://blog.csdn.net/qq_15505637/article/details/53887274
type是是否改变深度的,即uint8、uint16、float等,-1就是保持不变
scale是比例因子,即每个像素值需要乘的值
shift是在每个像素上加上的值
opencv调整亮度:https://blog.csdn.net/hb707934728/article/details/74914104
g(i,j)=a*f(i,j)+b a是调整对比度,b是调整亮度,实际上就是scale调整对比度,shift调整亮度,这里就是对比度不变,调整亮度
caffe_rng_uniform:生成n个在a、b之间均匀分布的值
uniform distribution:均匀分布
http://www.voidcn.com/article/p-hqhoassv-qh.html
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
CHECK_GE(n, );
CHECK(r);
CHECK_LE(a, b);
boost::uniform_real<Dtype> random_distribution(a, caffe_nextafter<Dtype>(b));
boost::variate_generator<caffe::rng_t*, boost::uniform_real<Dtype> >
variate_generator(caffe_rng(), random_distribution);
for (int i = ; i < n; ++i) {
r[i] = variate_generator();
}
}
2.
之前的RandomBrightness是增加亮度,RandomContrast则是增加对比度,其实两个函数的实现差不多,
之前的RandomBrightness博客说过,g(i,j)=a*f(i,j)+b是对比度和亮度的数学表达,调整a是调整的对比度,调整b是调整的亮度,RandomBrightness、RandomContrast是分别实现的调整a和b
RandomBrightness和RandomContrast的prob都是表示执行这个操作的可能性,即是否调整对比度和亮度
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;
}
}
调整的值是delta,实际上是通过在lower和upper选取均匀分布的一个值作为调整对比度的值
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 RandomBrightness和RandomContrast的更多相关文章
- caffe RandomHue和RandomSaturation
https://www.cnblogs.com/wangyblzu/p/5710715.html HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度 1.RandomHue void R ...
- 基于window7+caffe实现图像艺术风格转换style-transfer
这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...
- caffe的python接口学习(7):绘制loss和accuracy曲线
使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...
- 基于Caffe的Large Margin Softmax Loss的实现(中)
小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文: http://www.miao ...
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- 基于Caffe的DeepID2实现(下)
小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...
- 基于Caffe的DeepID2实现(中)
小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...
- 基于Caffe的DeepID2实现(上)
小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...
- 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...
随机推荐
- 6-----Scrapy框架中Item Pipeline用法
当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...
- oracle 用mybatis生成主键
oracle主键是不能像mysql一样自动管理的,需要自己手动管理,先生成,再插入. <selectKey keyProperty="id" resultType=" ...
- Unable to instantiate receiver xxx.receiver.NetworkReceiver异常
Unable to instantiate xxxreceiver.NetworkReceiver: 这个异常是之前版本有NetworkReceiver(监听网络变化的),新的版本删除了Network ...
- 2019.03.21 读书笔记 枚举ENUM
其实没必要为枚举显式赋值,如果赋值了,就一定要全部赋值,否则默认在上一个元素的基础上+1,如果不给枚举变量赋值,就算枚举中没有0元素,也会显示为0,而超出枚举范围的整型数据,也会显示值本身,而不是异常 ...
- Android中当前Activity跳转到当前Activity页面
步骤:先关闭自己,在跳转 case R.id.btn_copy:// 复制 Toast.makeText(mContext, "正在复制", Toast.LENGTH_SHORT) ...
- Java基础08-猜拳游戏
自己写的low代码 import java.util.*; public class Test1{ public static void main(String[] args){ System.out ...
- ColorCtr控制颜色渐变
ColorCtr控制颜色渐变 public class ColorCtr : MonoBehaviour { public static global_color Instance; ...
- (转)iptables简介
iptables简介 原文:https://www.cnblogs.com/metoy/p/4320813.html netfilter/iptables(简称为iptables)组成Linux平台下 ...
- JavaScript比较运算符——"== != === !=="区别
JavaScript的比较和逻辑运算符用于测试 true 或 false. 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 例如给定 x=5,下面的表格解释了比较运算符: 1. == 和===的 ...
- S3C2440 中断相关寄存器小探
========================================== 转载时请注明出处和作者联系方式 文章出处:http://blog.csdn.net/longintchar 作者联 ...