HSV模型简介以及利用HSV模型随机增强图像

53 篇文章 1595 订阅
订阅专栏


图像HSV模型简介

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)(参考百度)。在HSV模型中,颜色是由色度(Hue),饱和度(Saturation),明度(Value)共同组成。

如图所示,HSV模型中

  • 色度(Hue)使用角度度量的,范围是从 0 ° 0\degree 0° 360 ° 360\degree 360°(逆时针旋转),比如 0 ° / 360 ° 0\degree/360\degree 0°/360°代表红色, 120 ° 120\degree 120°代表原谅色, 240 ° 240\degree 240°代表蓝色。
    hue
  • 饱和度(Saturation)表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高(参考百度)。其范围是0到1。
    sat
  • 明度(Value)颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关。其范围是0(暗)到1(明)。
    val

RGB模型转HSV模型

参考opencv官方文档: https://docs.opencv.org/master/de/d25/imgproc_color_conversions.html#color_convert_rgb_hsv
首先将R,G,B分量数值缩放到范围0到1之间,即除以255. 接下来按如下公式进行转换即可。
V = m a x ( R , G , B )   S = { V − m i n ( R , G , B ) V        if   V ≠ 0 0                       otherwise   H = { 60 ( G − B ) / ( V − m i n ( R , G , B ) )                if V=R 120 + 60 ( B − R ) / ( V − m i n ( R , G , B ) )     if V=G 240 + 60 ( R − B ) / ( V − m i n ( R , G , B ) )     if V=B 0                                                               if R=G=B V=max(R, G, B) \\ \ \\ S = \left\{\begin{matrix} \frac{V - min(R,G,B)}{V} \ \ \ \ \ \ \ \text{if} \ \ V \ne 0 \\ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{otherwise} \end{matrix}\right. \\ \ \\ H = \left\{\begin{matrix} 60(G-B)/(V-min(R, G, B)) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if V=R}\\ 120+60(B-R)/(V-min(R, G, B)) \ \ \ \ \text{if V=G} \\ 240+60(R-B)/(V-min(R, G, B)) \ \ \ \ \text{if V=B} \\ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if R=G=B} \end{matrix}\right. V=max(R,G,B) S={VVmin(R,G,B)       if  V=00                      otherwise H=60(GB)/(Vmin(R,G,B))               if V=R120+60(BR)/(Vmin(R,G,B))    if V=G240+60(RB)/(Vmin(R,G,B))    if V=B0                                                              if R=G=B
转换之后V和S都是在0-1之间,H是在 0 ° 0\degree 0° 360 ° 360\degree 360°之间(计算的结果可能小于0,如果小于0就加上360)。

假设要将像素(110, 20, 50)分别对应RGB分量,转换到HSV模型空间中。
( 110 , 20 , 50 ) / 255 ⟶ ( 0.4314 , 0.0784 , 0.1961 )   V = m a x ( 0.4314 , 0.0784 , 0.1961 ) = 0.4314   S = 0.4314 − m i n ( 0.4314 , 0.0784 , 0.1961 ) 0.4314 = 0.8183   H = 60 ( 0.0784 − 0.1961 ) 0.4314 − m i n ( 0.4314 , 0.0784 , 0.1961 ) ≈ − 20 (110, 20, 50) / 255 \longrightarrow (0.4314, 0.0784, 0.1961) \\ \ \\ V = max(0.4314, 0.0784, 0.1961) = 0.4314 \\ \ \\ S = \frac{0.4314-min(0.4314, 0.0784, 0.1961)}{0.4314}=0.8183 \\ \ \\ H = \frac{ 60(0.0784-0.1961)}{0.4314 - min(0.4314, 0.0784, 0.1961)}\approx -20 (110,20,50)/255(0.4314,0.0784,0.1961) V=max(0.4314,0.0784,0.1961)=0.4314 S=0.43140.4314min(0.4314,0.0784,0.1961)=0.8183 H=0.4314min(0.4314,0.0784,0.1961)60(0.07840.1961)20
那么转换后的V=0.4314,S=0.8183,由于H小于0所以加上360即H=340


opencv关于HSV模型实验

使用opencv将RGB模型图像转成HSV模型图像非常简单,直接使用cv2.cvtColor函数,在code参数中传入cv2.COLOR_RGB2HSV参数即可。 但需要注意一下,通过opencv转HSV后会根据传入的数据类型缩放到不同范围,如果输入的是Uint8类型的数据(一般读入的图片数据类型都是Uint8),默认缩放到0到255之间 。 那么对于饱和度明度(默认0到1之间)而言直接乘以255然后取整即可。对于色度(默认是在0到360之间)由于超出了Uint8数据类型的范围,所以官方储存时是直接除以2即缩放到0到180之间。参考opencv官方文档: https://docs.opencv.org/master/de/d25/imgproc_color_conversions.html#color_convert_rgb_hsv

rgb2hsv那么对于刚刚讲的示例将(110, 20, 50)RGB模型空间转到HSV模型空间得到是(340,0.8183,0.4314),按照刚刚讲的在opencv转换后应该是:
H : 340 / 2 ⟶ 170 S : 0.8183 × 255 ⟶ 209 V : 0.4314 × 255 ⟶ 110 H: 340/2 \longrightarrow 170 \\ S: 0.8183\times255 \longrightarrow 209 \\ V:0.4314\times255 \longrightarrow 110 H:340/2170S:0.8183×255209V:0.4314×255110
使用opencv转换试下看对不对:

import cv2
import numpy as np

rgb = np.array([110, 20, 50], dtype=np.uint8).reshape((1, 1, 3))
hsv = cv2.cvtColor(rgb, cv2.COLOR_RGB2HSV)
print(hsv)

终端打印的结果是[[[170 209 110]]],和我们计算的是一样的,说明理解到位。

接下来在使用opencv来固定色度,饱和度,明度其中两个变量,渐变剩下一个变量来看看效果。
固定sat(饱和度)以及val(明度),渐变hue(色度)。从左到右数值从0到180(对应hue中 0 ° 0\degree 0° 360 ° 360\degree 360°

import cv2
import numpy as np


hue = np.tile(np.arange(0, 180, dtype=np.uint8).reshape((1, 180, 1)),
             (50, 1, 1))
sat= np.ones((50, 180, 1), dtype=np.uint8) * 255
val = np.ones((50, 180, 1), dtype=np.uint8) * 255
img_hsv = cv2.merge((hue, sat, val))
img = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)
# img = cv2.resize(img, (720, 100))
cv2.imshow("img", img)
cv2.waitKey(0)

hue


固定hue(色度)以及val(明度),渐变sat(饱和度)。从左到右数值从0到255(对应sat中 0 0 0 1 1 1,饱和度越来越高)

import cv2
import numpy as np


hue = np.zeros((100, 256, 1), dtype=np.uint8)
sat = np.tile(np.arange(0, 256, dtype=np.uint8).reshape((1, 256, 1)),
             (100, 1, 1))
val = np.ones((100, 256, 1), dtype=np.uint8) * 255
img_hsv = cv2.merge((hue, sat, val))
img = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)
# img = cv2.resize(img, (720, 100))
cv2.imshow("img", img)
cv2.waitKey(0)

sat


固定hue(色度)以及sat(饱和度),渐变val(明度)。从左到右数值从0到255(对应val中 0 0 0 1 1 1,明度越来越高)

import cv2
import numpy as np


hue = np.zeros((100, 256, 1), dtype=np.uint8)
sat = np.ones((100, 256, 1), dtype=np.uint8) * 255
val = np.tile(np.arange(0, 256, dtype=np.uint8).reshape((1, 256, 1)),
             (100, 1, 1))
img_hsv = cv2.merge((hue, sat, val))
img = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)
# img = cv2.resize(img, (720, 100))
cv2.imshow("img", img)
cv2.waitKey(0)

val


随机增强图像HSV

下面的代码来自之前讲的yolov3 spp项目(增强方法并不唯一),这里结合以上讲的知识进行简单讲解。

  • 首先传入图像img以及三个超参数h_gain,s_gain,v_gain
  • 使用np.random.uniform增对h,s,v分别随机生成了一个[-1, 1]之间的随机数,然后分别乘上传入的h_gain,s_gain,v_gain,最后加上1。假设h_gain=0.5那么会在[0.5, 1.5]之间随机生成一个倍率因子,后面会将所有hue数值乘上这个倍率。s_gain,v_gain同理不再赘述。
  • 使用cv2.cvtColor函数将传入的图片由BGR格式(opencv读取图片的默认格式是BGR)转成HSV,在使用cv2.split函数将HSV分量分开分别赋值给hue, sat, val
  • 分别针对hue, sat以及val生成对应的Look-Up Table(LUT)查找表(记录变换前后数值的对应表)。就是将0-255范围内所有的数值都乘以刚刚生成的随机倍率因子构建LUT,后面针对每个元素直接查表无需再计算。注意,hue范围是在0到180之间的,所以有个取余的操作%180,sat和val范围是0到255之间,所以使用np.clip防止越界。
  • 使用cv2.LUT方法利用刚刚针对hue, sat以及val生成的Look-Up Table进行变换。变换后使用cv2.merge方法再将hue, sat以及val分量合并个hsv图像。
  • 最后使用cv2.cvtColor再将hsv图像转换回bgr图像。
import cv2
import numpy as np


def augment_hsv(img, h_gain=0.5, s_gain=0.5, v_gain=0.5):
    r = np.random.uniform(-1, 1, 3) * [h_gain, s_gain, v_gain] + 1  # random gains
    hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
    dtype = img.dtype  # uint8

    x = np.arange(0, 256, dtype=np.int16)
    lut_hue = ((x * r[0]) % 180).astype(dtype)
    lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
    lut_val = np.clip(x * r[2], 0, 255).astype(dtype)

    img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype)
    aug_img = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)
    return aug_img

下图是调用augment_hsv随机增强前、后的效果,左图是随机增强前,右图是随机增强后。

aug

OpenCV HSV颜色识别及HSV基本颜色分量范围
09-19
主要介绍了OpenCV HSV颜色识别及HSV基本颜色分量范围,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
第十三章 OpenGL ES-RGB、HSV、HSL模型介绍
u012836015的博客
04-09 1584
RGB颜色模型是一种用于创建各种颜色的方法,它基于红色(Red)、绿色(Green)和蓝色(Blue)三种颜色的组合。通过调节这三种颜色的强度和比例,可以生成多种不同的颜色。在计算机图形学和数字显示领域中,RGB颜色模型是最常用的颜色表示方式之一。可以把RGB颜色模型建立在一个RGB颜色立方体,如下图所示。
HSV颜色模型OpenCV中的颜色分量范围介绍【建议收藏】
最新发布
努力让自己发光,对的人才能迎着光而来
07-22 7万+
HSV颜色模型OpenCV中的颜色分量范围介绍【建议收藏】
OpenCv图像的数据增强HSV色彩空间介绍以及与BGR空间的转换
qq_43799400的博客
05-11 4997
图像的数据增强HSV色彩空间介绍以及与BGR空间的转换
OpenCV轻松入门(七)——HSV颜色模型图像特效案例:判断白天夜晚&抠图颜色过滤&替换背景图
weixin_46157873的博客
04-15 742
HSV是指色调、饱和度、明暗度。基于该颜色模型可以做很多很多特效,本文列举了几个简单小栗子,快来学学吧!
HSV图像查看器
01-06
1、这是一款HSV图像查看器; 2、内置6个滑动条,可以调整H、S、V滑动条,查看相应ROI变化。
HSV颜色模型
pamxy啲Coding窝...
06-04 2015
转自百度百科:http://baike.baidu.com/view/541362.htm#sub8445478   HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 这个模型颜色的参数分别是:色调(H),饱和度(S),亮度(V)。   HSV颜色
深度学习中小知识点系列(五) 解读HSV模型随机增强图像
weixin_44302770的博客
11-27 1570
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)(参考百度)。在HSV模型中,颜色是由色度(Hue),饱和度明度(Value)共同组成。如图所示,HSV模型中色度(Hue)使用角度度量的,范围是从0°到360°(逆时针旋转),比如0°/360°代表红色, 120°代表原谅色,240°代表蓝色。饱和度(Saturation)表示颜色接近光谱色的程度。
计算机视觉的那些事——HSV颜色模型
weixin_45675563的博客
09-07 2751
HSV颜色模型 HSV(Hue, Saturation,Value)根据颜色直观特性创建的一种颜色空间,也称六角锥体模型(Hexcone Model),参数分别为色调(H),饱和度(S),明度(V)。 颜色模型 色调H 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°; 饱和度S 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜
OpenCV机器视觉-HSV颜色模型
A
05-17 9776
HSV颜色模型 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 这个模型颜色的参数分别是:色调(H),饱和度(S),明度(V) 色调H 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°; 饱和度S 饱和度S表示颜色接近光谱色的程度。一种颜色
HSV.m[实现HSV颜色空间模型的绘制]
05-08
1.实现HSV颜色空间模型的绘制 2.代码注释详尽 3.标注有格子线条,颜色色调按区域划分 1.实现HSV颜色空间模型的绘制 2.代码注释详尽 3.标注有格子线条,颜色色调按区域划分
hsv.rar_HSV _HSV 图像分割_hsv图像分类_图像HSV_图像分类
09-21
HSV模型尤其适合于图像分割和分类,因为它更符合人类对颜色的理解。 标题中的“hsv.rar_HSV _HSV 图像分割_hsv图像分类_图像HSV_图像分类”指的是一种使用HSV色彩模型进行图像处理的方法,主要涉及两个核心概念:...
基于SUSAN角点和HSV颜色模型的粒子滤波目标跟踪算法
02-09
其次,HSV颜色模型是一个用来表示颜色模型,它与RGB颜色模型不同,RGB模型是基于颜色的红、绿、蓝三个颜色通道的组合,而HSV模型则代表色调(Hue)、饱和度(Saturation)和亮度(Value)三个维度。HSV模型的一个重要...
基于matlab对图像特征的分类随机森林算法
04-02
本项目“基于matlab对图像特征的分类随机森林算法”旨在利用MATLAB这一强大的计算环境,实现图像特征的提取与分类,以提升图像识别的准确性和效率。 MATLAB是一种广泛使用的数学计算软件,尤其在科学计算和工程应用...
利用HSV模型进行图像数据增强具体应该怎么做
07-13
利用HSV(色相、饱和度、明度)模型进行图像数据增强可以通过调整图像的色相、饱和度和明度来改变图像的外观。下面是具体的步骤: 1. 将图像从RGB色彩空间转换到HSV色彩空间。 2. 对色相(H)、饱和度(S)和明度...
深度学习数据增强方法-内含(亮度增强、对比度增强、旋转图像、翻转图像、仿射变化扩充图像、错切变化扩充图像HSV数据增强、平移扩充)8种方式进行增强-每种扩充一张实现8倍扩)+ 图像缩放代码-批量
爱吃橘子的小翟
04-01 1万+
在进行深度学习训练的时候,我们往往会面临数据集不够的情况,需要进行数据集的扩充,数据集的扩充有多种多样的方式,在这里总结了8种数据扩充的方法对数据进行数据增强,包括:亮度增强,对比度增强,翻转图像,仿射变化扩充图像,错切变化扩充图像HSV数据增强7种方法对数据进行增强。 前四种方式很好理解,仿射变化和错切变化的原理请参考: 数据增广:旋转,缩放,平移以及错切_太阳花的小绿豆的博客-CSDN博客 HSV数据增强的方法请参考: HSV模型简介以及利用HSV模型随机增强图像_太阳花的小绿...
HSV颜色空间
r91987的专栏
03-20 2万+
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1。它包含RGB模型中的 R=1,G=1,B=1三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于角度0°,绿色对应于角度120°,蓝色对应于角度240°。 在HSV颜色模型中,每一种颜色和它的补色相差180°。饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的 一个子集,这个模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。
图像处理——HSV图像应用(matlab)
weixin_43808138的博客
02-20 9315
本文主要讲解如何利用HSV图像识别蘑菇上的异物,并去除异物
写文章

热门文章

  • Vision Transformer详解 262147
  • YOLOv5网络详解 231777
  • Swin-Transformer网络结构详解 225333
  • YOLO v3网络结构分析 174422
  • Drawio使用简介(慢慢更新中) 163871

分类专栏

  • 深度学习 53篇
  • onnx 1篇
  • pytorch 25篇
  • 软件使用 6篇
  • 图像分类 6篇
  • 网络解析 13篇
  • 算法 3篇
  • python项目 7篇
  • object detection目标检测 12篇
  • 关键点检测 1篇
  • 数据集介绍 1篇
  • paddle 2篇
  • 语义分割 5篇
  • 后端开发 8篇
  • 数据库 1篇
  • 编程语言 2篇
  • ubuntu16.04 3篇
  • 资源爬取 1篇
  • tensor操作 1篇
  • Tensorflow 25篇
  • 软件安装 26篇
  • 编程开发 8篇

最新评论

  • Vision Transformer详解

    Jeson Eric: 有理论依据吗

  • 双线性插值

    qq_56528961: 双线性插值应该是约等号吧

  • YOLOX网络结构详解

    Brubrubruce: 应该是的

  • Drawio使用简介(慢慢更新中)

    Homie_Liu: 阴影无法使用

  • Vision Transformer详解

    weixin_54368232: 为什么linear Projection 是卷积层,而不是全连接层?听李沐老师团队的朱老师讲是全连接层,这个使用卷积层整个模型为什么不是混合模型?谢谢

最新文章

  • 如何精确统计Pytorch模型推理时间
  • Python多线程加速-休眠部分线程
  • Pytorch官方FlashAttention速度测试
2024年8篇
2023年3篇
2022年13篇
2021年34篇
2020年20篇
2019年23篇
2018年8篇
2017年6篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳花的小绿豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王珠海网站建设推广优化扬州网络推广网站优化哪家技术好南城网站优化外包网站排名优化好学吗怎么以低成本给自己的网站做优化网站优化软件挣钱新浦网站优化芝罘网站优化团队沁阳网站排名优化推荐优化企业网站认定金手指辛集网站关键词优化服务网站关键词优化价格是多少搜狗优化好的网站松滋关键词网站优化上海seo网站优化优化多个网站外链怎么发网站优化关键词写作简单网站建设优化诊断济源网站关键词点击排名优化优化网站哪个公司好大连网站排名优化价格网站做优化一开始怎么做德阳网站综合优化泰州个人网站优化保定怎样优化网站厦门湖里区网站优化推广辽源网站优化优化网站排名找金手指天猫网站404页面优化下城区网站优化排名价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化