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 评分和 ...
随机推荐
- my06_sysbench install for mysql 并初始化表数据
sysbench安装 ************************************************************** 安装sysbench依赖包 rpm -q autom ...
- 1.Exadata技术演进
V1-v2 和 HP Exadata 2-2 和 SUN 2011 3-2 4-2 5-2 2014底 2-2 混合运算 2-8 是大数据运算 问题1. 随着系统规模增加,传统数据库架 ...
- Mybatis学习笔记16 - bind标签
1.${}拼串进行模糊查询,不安全 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java ...
- Android官方架构组件介绍之应用(四)
讲一个项目常见的功能,友盟统计功能 例如一个项目有很多多modlue,每个里面modlue都有Activity,Activity需要友盟统一,Fragment也需要友盟统计.一般做法就是继承一个Bas ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- maya安装不了
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- Java基础13-数组算法
1.数组的复制 //复制算法,将arr1数组的值复制给arr2数组 import java.util.Arrays; public class Test1{ public static void ma ...
- (转)Shell脚本之break,continue,和exit区别
Linux脚本中的break continue exit return break结束并退出循环 continue在循环中不执行continue下面的代码,转而进入下一轮循环 exit退出脚本,常带一 ...
- rake 任务参数传递问题解决
原文 : https://robots.thoughtbot.com/how-to-use-arguments-in-a-rake-task namespace :tweets do desc 'S ...
- 比特币--私钥->公钥->钱包地址
脑钱包-字符串SHA256散列成256bit当做私钥-彩虹表 脑钱包是开源的程序-->用户输入字符串当做密码-->经过SHA256散列算法-->256长bit位 (即是私钥)--&g ...