色彩表示与编码

2023-05-16

图片中的代码,依旧是RGB色值的表示。在计算机中,RGB的每个通道,通常都以8位2进制空间来存储,因此能对每个通道进行256阶分级:
以10进制数表示时,范围为0~255;
以16进制数表示时,范围为0~FF。

图中 #412ed1 的表示方法,就是采用了16进制的表示:
开头的 # ,是一个标记(这种表示常见于html及css等编码中);
后面的6个数码,2个2个2个分隔,依次对应R、G、B三个通道。

也就是说,#412ed1相当于 R=(hex)41, G=(hex)2e, B=(hex)d1。

(2)
潘通,指的是Pantone,中文有时也翻译成“彩通”。提到Pantone的时候,一般是指由Pantone公司开发制定的色彩及色彩系统,它们有一套自己的编码系统,但似乎不太直观。
// 应该是有一定规律规范的,不过我自己也不了解 : )
// 一般都会直接对照色卡或借助软件工具,来获取色彩对应的编码。

Pantone色,有时印刷行当的人也会笼统地称它们为“专色”。

1.颜色模式转换及采样

RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。Y代表亮度,Cb和Cr则代表色度、饱和度。通过下列计算公式可完成数据转换。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。

2.DCT变换

DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下: JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。 DCT变换公式:

x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表DCT变换后矩阵内某个数值的坐标位置F(u,v)代表DCT变换后矩阵内的某个数值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过DCT变换后的矩阵数据自然数为频率系数,这些系数以F(0,0)的值最大,称为DC,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为AC。

3、量化

图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,JPEG提供的量化表如下:

4、编码

Huffman编码无专利权问题,成为JPEG最常用的编码方式,Huffman编码通常是以完整的MCU来进行的。 编码时,每个矩阵数据的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与色度也需要不同的Huffman编码表,所以一共需要四个编码表,才能顺利地完成JPEG编码工作。 DC编码 DC是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的Bit数与差值内容的对照。 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度DC差值的编码表。根据这两份表格内容,即可为DC差值加上霍夫曼码值,完成DC的编码工作。

AC编码 AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排序,即按照下图箭头所指示的顺序串联起来。

63个AC值排列好的,将AC系数转换成中间符号,中间符号表示为RRRR/SSSS,RRRR是指第非零的AC之前,其值为0的AC个数,SSSS是指AC值所需的位数,AC系数的范围与SSSS的对应关系与DC差值Bits数与差值内容对照表相似。 如果连续为0的AC个数大于15,则用15/0来表示连续的16个0,15/0称为ZRL(Zero Rum Length),而(0/0)称为EOB(Enel of Block)用来表示其后所剩余的AC系数皆等于0,以中间符号值作为索引值,从相应的AC编码表中找出适当的霍夫曼码值,再与AC值相连即可。 例如某一组亮度的中间符为5/3,AC值为4,首先以5/3为索引值,从亮度AC的Huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的Huffman编码1111111110011110100,[5,4]表示AC值为4的前面有5个零。 由于亮度AC,色度AC霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。 实现上述四个步骤,即完成一幅图像的JPEG压缩。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

色彩表示与编码 的相关文章

  • CMake中target_link_libraries的使用

    CMake中的target link libraries命令用于指定链接给定目标和 或其依赖项时要使用的库或标志 来自链接库目标的使用要求将被传播 propagated 目标依赖项的使用要求会影响其自身源代码的编译 其格式如下 xff1a
  • CMake中install的使用

    CMake中的install命令用于指定安装时要运行的规则 xff0c 其格式如下 xff1a install TARGETS targets EXPORT lt export name gt RUNTIME DEPENDENCIES ar
  • 相机的内参和外参介绍

    注 xff1a 以下相机内参与外参介绍除来自网络整理外全部来自于 视觉SLAM十四讲从理论到实践 第2版 中的第5讲 xff1a 相机与图像 xff0c 为了方便查看 xff0c 我将每节合并到了一幅图像中 相机与摄像机区别 xff1a 相
  • Linux下常用的C/C++开源Socket库

    1 Linux Socket Programming In C 43 43 http tldp org LDP LG issue74 tougher html 2 ACE http www cs wustl edu schmidt ACE
  • C++11中unique_ptr的使用

    在C 43 43 中 xff0c 动态内存的管理是通过一对运算符来完成的 xff1a new xff0c 在动态内存中为对象分配空间并返回一个指向该对象的指针 xff0c 可以选择对对象进行初始化 xff1b delete xff0c 接受
  • 2021年校招软件测试工程师经典面试题,月薪15K你需要掌握哪些知识点?

    软件测试工程师 xff0c 和开发工程师相比起来 xff0c 前期可能不会涉及太深奥的内容 xff0c 但是涉及的面还是比较广的 面试实习生或者一年左右的岗位 xff0c 问的也主要是一些基础性的问题比较多 涉及的知识主要有MySQL数据库
  • 矩阵特征分解介绍及雅克比(Jacobi)方法实现特征值和特征向量的求解(C++/OpenCV/Eigen)

    对角矩阵 diagonal matrix xff1a 只在主对角线上含有非零元素 xff0c 其它位置都是零 xff0c 对角线上的元素可以为0或其它值 形式上 xff0c 矩阵D是对角矩阵 xff0c 当且仅当对于所有的i j Di j
  • HTTP解析库http-parser简介及使用

    http parser是一个用C编写的HTTP消息解析器 xff0c 可以解析请求和响应 xff0c 被设计用于高性能HTTP应用程序 它不会进行任何系统调用及内存分配 xff0c 它不会缓冲数据 xff0c 它可以被随时中断 根据你的体系
  • k8s之multus cni

    通常情况下在k8s中 xff0c 一个pod只有一个接口 xff0c 用于集群网络中pod和pod通信 xff0c 而multus定义了一种crd Kubernetes Network Custom Resource Definition
  • 【机器学习】浅析机器学习各大算法的适用场景

    最近在参加一个分类算法竞赛 xff0c 也正好整理各个分类机器学习算法的简单介绍 xff0c 应用场景和优缺点 资源来自网上和自己个人理解 一 逻辑回归模型 1 理解逻辑回归模型 xff08 LR xff09 逻辑回归是一种分类算法 xff
  • 【机器学习】异常检测算法之(KNN)-K Nearest Neighbors

    sklearn库里的KNN并没有直接用于异常检测 xff0c 但是包含了距离计算的函数 xff0c 所以我们应用PyOD中KNN库进行异常检测 xff0c 里面基本上也是调用sklearn的函数进行计算 xff0c 并进行了一些加工 一 图
  • 异常检测从入门到应用

    作者 xff1a 成森 64 知乎 来源 xff1a https zhuanlan zhihu com p 116235115 异常检测 Anomaly Detection 作为机器学习的一个重要分支 xff0c 实际应用领域广泛 xff0
  • Jetson Nano配置踩坑全记录

    Jetson Nano配置踩坑全记录 Jetson Nano相关参数 xff1a JetPack 4 6 xff0c cuda 10 2 xff0c SD卡内存 xff1a 512G 一 Jetson Nano系统镜像烧录 在Nvidia官
  • kubeadm的rbac

    什么是 Kubernetes RBAC 基于角色的访问控制 xff08 Role Based Access Control 即 34 RBAC 34 xff09 xff1a 使用 rbac authorization k8s io API
  • kubeadm部署dashboard-2.0.0版本

    kubeadm部署dashboard 2 0 0版本 创建dashboard的secret的私钥 root 64 yunwei CA openssl genrsa out od com key 2048 创建dashboard的secret
  • redis5.0的主从跟哨兵

    redis的主从跟哨兵 安装redis 5 0 12 下载地址 xff1a https download redis io releases 1 下载安装redis root 64 master01 cd opt root 64 maste
  • ROS运行gazebo提示“process has die”问题-已解决

    ROS运行gazebo提示 process has die 问题 已解决 解决方案概述升级gazebo方法 解决方案概述 无数次出现这个问题 xff0c 看了好多教程 xff0c 有的是把这个命令添加到 bashrc文件中 xff1a ex
  • Elasticsearch7.9集群部署,head插件,canal同步mysql数据到es,亲自测试,无坑

    Elasticsearch集群部署 1 服务器规划 10 4 7 11 node1 10 4 7 12 node2 10 4 7 13 node3 1 集群相关 一个运行中的 Elasticsearch 实例称为一个节点 xff0c 而集群
  • elasticsearch备份

    es集群主机分布 10 4 7 11 node1 10 4 7 12 node2 10 4 7 21 node3 10 4 7 22 nfs 1 在主机10 4 7 22部署nfs root 64 localhost yum install

随机推荐

  • 批量拷贝公钥到指定的主机,实现免秘钥登录

    一 xff1a copy公钥脚本 root 64 ansible tmp cat copy pubkey sh bin bash PassWord 61 1 rpm qa grep sshpass 2 gt amp 1 gt dev nul
  • centos7内核参数优化以及内核升级

    一 xff1a 修改内核配置文件 vim etc sysctl conf 刷新配置文件 sysctl p 关IPv6 net ipv6 conf all disable ipv6 61 1 net ipv6 conf default dis
  • k8s的ceph

    ceph安装 地址 xff1a https rook io docs rook v1 8 quickstart html 特性丰富 1 xff0c 支持三种存储接口 xff1a 块存储 文件存储 对象存储 2 xff0c 支持自定义接口 x
  • prometheus监控k8s集群

    prometheus监控k8s集群 实现思路 pod性能 xff1a 使用cadvisor进行实现 xff0c 监控容器的CPU 内存利用率 Node性能 xff1a 使用node exporter实现 xff0c 主要监控节点CPU 内存
  • centos7部署vsftpd虚拟用户

    vsftpd部署 一 xff1a 安装vsftpd 1 首先要查看你是否安装vsftpd rpm qa grep vsftpd vsftpd 3 0 2 10 el7 x86 64 2 安装vsftpd yum install y vsft
  • Ceph OSD扩容与缩容

    在企业生产环境中 xff0c 随着时间的迁移数据会存在磁盘空间不足 xff0c 或者机器节点故障等情况 OSD又是实际存储数据 xff0c 所以扩容和缩容OSD就很有必要性 随着我们数据量的增长 xff0c 后期可能我们需要对osd进行扩容
  • mysql的条件查询基础知识(一)

    一 xff1a 条件查询基础知识 语法 xff1a select 查询列表 from 表名 where 筛选条件 二 xff1a 分类 xff1a 主要分为3类 xff1a 一 按条件表达式筛选 简单条件运算符 xff1a gt lt 61
  • 【C++构造函数后面的冒号作用】

    C 43 43 构造函数后面的冒号作用 功能1 对基类进行初始化2 对类成员进行初始化3 对类中const变量进行初始化 功能 1 对基类进行初始化 多重继承中 xff0c 对多个基类进行初始化 冒号后面有多个参数 xff0c 中间用逗号隔
  • mysql基础知识常见函数(二)

    一 xff1a 常见函数概念 概念 xff1a 类似于java的方法 xff0c 将一组逻辑语句封装在方法体中 xff0c 对外暴露方法名 好处 xff1a 1 隐藏了实现细节 2 提高代码的重用性 调用 xff1a select 函数名
  • mysql基础知识分组函数跟分组查询(三)

    一 xff1a 分组函数 功能 xff1a 用作统计使用 xff0c 又称为聚合函数或统计函数或组函数 分类 xff1a sum 求和 avg 平均值 max 最大值 min 最小值 count 计算个数 特点 xff1a 1 sum av
  • $*和$@的区别

    一 xff1a 解析 xff1a 会把接收到的所有参数当成一个整体对待 xff0c 表示一个参数 64 会对待接收到的所有参数进行区分 以空格分隔开 xff0c 独立的多个参数 二 xff1a 举例说明 root 64 fengge sh
  • mysql性能瓶颈排查

    mysql性能瓶颈排查 top free vmstat sar mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是 user 还是sys 高 确认是否是物理内存不够用了 确认是否有swap产生 使用下面工具
  • centos7系统提示no space left on device

    一 操作报错 no space left on device 但是查看系统磁盘占用空间 xff0c 却还有空闲 xff0c 说明是inodes占用满了 二 查看磁盘系统的inodes使用情况 三 要解决这问题 xff0c 只需找出 xff0
  • page_cleaner

    MySQL Error Log 中IO写入瓶颈的警告分析 在一台MySQL实例上频繁做大批量的写入测试 xff0c 无意中发现MySQL的errorlog中频繁出现如下的Note xff1a page cleaner 1000ms inte
  • mysql的存储函数与存储过程

    1 存储过程概述 我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句 xff0c 但是在数据库的实际操作中 xff0c 经常会有需要多条 SQL 语句处理多个表才能完成的操作 例如 xff0c 为了确认学生能否毕业
  • 逆变

    去年今日此门中 xff0c 人面桃花相映红 人面不知何处去 xff0c 桃花依旧笑春风 去年的今天 xff0c 刚高考完的我正处于迷茫与蹉跎之中 xff0c 想起那时候的我 xff0c 怀着此种状态 xff0c 想必也无可厚非吧 xff01
  • 使用SecureCRT+VNCViewer进行端口转发,修改端口映射

    1 设置本地端口转发属性 xff0c 设置成功后 xff0c 此时已经将服务器上的5901端口映射到windows本地的5901端口 2 打开本机VNCViewer进行远程连接的配置 3 打开该远程连接 xff0c 进行5000端口和999
  • 面试题目积累

    题目一 xff1a 如何配置寄存器 xff08 1 xff09 通过手册 一 找到要操作IO口的基地址 二 找到端口输入寄存器的地址偏移 三 找到输入数据寄存器中具体的端口数据位 2 操作IO口 一 找到基地址 二 找到偏移地址 xff0c
  • FreeRTOS学习笔记-Stream Buffer

    FreeRTOS学习笔记 Stream Buffer 概述关键函数课程示例StreamBuffer 创建 发送与接收StreamBuffer查询接收添加监控任务 xff0c 确定StreamBuffer大小 概述 关键函数 span cla
  • 色彩表示与编码

    图片中的代码 xff0c 依旧是RGB色值的表示 在计算机中 xff0c RGB的每个通道 xff0c 通常都以8位2进制空间来存储 xff0c 因此能对每个通道进行256阶分级 xff1a 以10进制数表示时 xff0c 范围为0 255