darknet图像预处理函数random_augment_image研究
更多darknet训练图像分类图像预处理
random_augment_image()
image random_augment_image(image im, float angle, float aspect, int low, int high, int size)
{aspect = rand_scale(aspect);int r = rand_int(low, high);int min = (im.h < im.w*aspect) ? im.h : im.w*aspect;float scale = (float)r / min;float rad = rand_uniform(-angle, angle) * 2.0 * M_PI / 360.;float dx = (im.w*scale/aspect - size) / 2.;float dy = (im.h*scale - size) / 2.;if(dx < 0) dx = 0;if(dy < 0) dy = 0;dx = rand_uniform(-dx, dx);dy = rand_uniform(-dy, dy);printf("random_augment_image rad: %f, scale: %f, size: %d,dx:%f,dy:%f,aspect:%f\n", rad, scale, size, dx, dy,aspect);image crop = rotate_crop_image(im, rad, scale, size, size, dx, dy, aspect);return crop;
}
1.random_gen
实现如下:
unsigned int random_gen()
{unsigned int rnd = 0;
#ifdef WIN32rand_s(&rnd);
#else // WIN32rnd = rand();
#if (RAND_MAX < 65536)rnd = rand()*(RAND_MAX + 1) + rnd;
#endif //(RAND_MAX < 65536)
#endif // WIN32return rnd;
}
其中:
errno_t rand_s( unsigned int* randomValue );
函数的参数是一个整型的指针,指向一个用于接收随机数的整数类型;生成的随机数范围是 0-UINT_MAX。
函数成功的话,返回值是 0;否则的话返回错误代码。
因此,random_gen()生成并返回一个int型的随机数。
2.rand_uniform_strong
rand_uniform_strong()产生min到max之间一个随机值
float rand_uniform_strong(float min, float max)
{if (max < min) {float swap = min;min = max;max = swap;}return (random_float() * (max - min)) + min;
}
random_float()产生一个float类型随机值。
3.rand_scale()
float rand_scale(float s)
{float scale = rand_uniform_strong(1, s);if(random_gen()%2) return scale;return 1./scale;
}
rotate_crop_image
字面意思理解:旋转裁剪图片
image rotate_crop_image(image im, float rad, float s, int w, int h, float dx, float dy, float aspect)
{int x, y, c;float cx = im.w/2.;float cy = im.h/2.;image rot = make_image(w, h, im.c);for(c = 0; c < im.c; ++c){for(y = 0; y < h; ++y){for(x = 0; x < w; ++x){float rx = cos(rad)*((x - w/2.)/s*aspect + dx/s*aspect) - sin(rad)*((y - h/2.)/s + dy/s) + cx;float ry = sin(rad)*((x - w/2.)/s*aspect + dx/s*aspect) + cos(rad)*((y - h/2.)/s + dy/s) + cy;float val = bilinear_interpolate(im, rx, ry, c);set_pixel(rot, x, y, c, val);}}}return rot;
}
计算rx,ry啥意思?
bilinear_interpolate
双线性插值
float bilinear_interpolate(image im, float x, float y, int c)
{int ix = (int) floorf(x);int iy = (int) floorf(y);float dx = x - ix;float dy = y - iy;float val = (1-dy) * (1-dx) * get_pixel_extend(im, ix, iy, c) +dy * (1-dx) * get_pixel_extend(im, ix, iy+1, c) +(1-dy) * dx * get_pixel_extend(im, ix+1, iy, c) +dy * dx * get_pixel_extend(im, ix+1, iy+1, c);return val;
}
get_pixel_extend()
static float get_pixel_extend(image m, int x, int y, int c)
{if (x < 0 || x >= m.w || y < 0 || y >= m.h) return 0;if (c < 0 || c >= m.c) return 0;return get_pixel(m, x, y, c);
}
get_pixel()
static float get_pixel(image m, int x, int y, int c)
{assert(x < m.w && y < m.h && c < m.c);return m.data[c*m.h*m.w + y*m.w + x];
}
darknet图像预处理函数random_augment_image研究相关推荐
- 训练图像预处理函数功能(paddle)
简 介: 尽管我们可以通过 下面命令获得paddle.vision.transforms中的所有的函数.那么这些函数的具体使用说明如何能够获得呢? 关键词: 数据预处理,paddle,vision,t ...
- 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
部分代码单独测试: 这里实践了图像大小调整的代码,值得注意的是格式问题: 输入输出图像时一定要使用uint8编码, 但是数据处理过程中TF会自动把编码方式调整为float32,所以输入时没问题,输出时 ...
- darknet训练图像分类图像预处理random_distort_image研究
更多darknet训练图像分类图像预处理 random_distort_image() void random_distort_image(image im, float hue, float sat ...
- 计算机表情识别技术研究学什么,表情识别的图像预处理和特征提取方法研究
表情识别的图像预处理和特征提取方法研究 表情识别是基于视觉信息将脸部的运动或脸部特征的形变进行分类,包括三部分:脸部定位.脸部特征抽取和表情分类.本文首先使用肤色模型进行脸部定位;对提取出来的人脸进 ...
- 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...
本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...
- opencv ocr字符识别_OCR深度实践系列:图像预处理
近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...
- matlab指纹图像采集,基于MATLAB实现的指纹图像预处理
西南民族大学学报·自然科学版第 34 卷第 4 期 Journal of Southwest University for Nationalities⋅Natural Science Edition ...
- 图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:思 当 CPU 图像预处理成为视觉任务的瓶颈,最新开源的CV ...
- CV基础(图像预处理)
文章目录 CV基础 1.课程概述 1.1 计算机视觉的研究理论和应用 1.2 主要研究维度 Tips tensorflow基础 图像预处理 1.颜色空间和图片处理 1.1彩色的三要素 1.2.基本颜色 ...
最新文章
- HPAIC人类蛋白质图谱分类挑战赛金牌经验分享
- 15 分钟带你入门 sklearn 与机器学习(分类算法篇)
- OS / linux / 互斥锁实现原理(futex)
- 67、ulimit的使用
- staf工作笔记-扩展stax官方实例的补坑说明
- Gson 转化为带反斜杠的json
- android cmd里查看systemapp剩余空间不足,解决emui系统内部存储空间不足的办法
- python 控制 cmd 命令行颜色
- 数据库执行自定义函数报错问题记录
- STM8S003F3 使用ADC:固件库版本与寄存器版本
- [渝粤教育] 宁波财经学院 金融工程学 参考 资料
- 哈希表的应用之电话本
- [高考作文] 秋细雨VS叶闲花
- kali linux系统下安装 VMware Tools
- matlab 图像处理之Refined Lee滤波
- html用来注释的标记,互联网常识:html的注释标记是什么
- 微软怎么设计Exchange 2003的体系结构
- VBA和Python双语对照,Excel编程学习更简单
- linux下jdk的安装与配置jdk-6u45-linux-i586.bin
- 百度,你能不能有点节操?
热门文章
- [SV]SystemVerilog進程之fork join专题详解及案例分析
- 【马士兵】Python基础--01
- 玫瑰李文案:玫瑰李水果店的文案怎么写
- 拉钩教育高薪训练营学习笔记
- 默认计算机网络密码是多少,tplogin.cn初始密码是多少 tplogin管理密码一般是多少...
- Flutter 中文文档:Flutter 应用里的国际化
- [茶香人家:原创资料]岩茶基础名词图解
- 大学人工智能专业应该怎么学
- vue项目中常用methods
- 计算机专业屏幕尺寸,电脑屏幕尺寸怎么看