JPEG: YCrCb <-> RGB 转换精度

2023-12-02

我已经使用 JPEG 转换公式实现了 rgb->ycrcb 和 ycrcb->rgb 转换
http://www.w3.org/Graphics/JPEG/jfif3.pdf
(同样在:http://en.wikipedia.org/wiki/YCbCr(JPEG 转换))。

检查结果是否正确时(原始->YCrCb->RGB),某些像素相差一,例如201->200。

平均精度误差百分比为 0.1%,因此并不重要。

/// converts RGB pixel to YCrCb using { en.wikipedia.org/wiki/YCbCr: JPEG conversion }
ivect4 rgb2ycrcb(int r, int g, int b)
{
    int y =  round(0.299*r + 0.587*g + 0.114*b) ;
    int cb = round(128.0 - (0.1687*r) - (0.3313*g) + (0.5*b));
    int cr = round(128.0 + (0.5*r) - (0.4187*g) - (0.0813*b));
    return ivect4(y, cr, cb, 255);
}
/// converts YCrCb pixel to RGB using { en.wikipedia.org/wiki/YCbCr: JPEG conversion }
ivect4 ycrcb2rgb(int y, int cr, int cb)
{
    int r = round(1.402*(cr-128) + y);
    int g = round(-0.34414*(cb-128)-0.71414*(cr-128) + y);
    int b = round(1.772*(cb-128) + y);
    return ivect4(r, g, b, 255);
}

我使用圆形公式:
楼层((x) + 0.5)

当使用其他类型的舍入时,例如float(int) 或 std::ceil(),结果更糟。

So, 是否存在在不损失精度的情况下进行 YCrCb RGB 转换的方法?


问题不在于舍入模式。

即使您将浮点常量转换为比率并仅使用整数数学,逆运算后您仍然会看到不同的值。

要了解原因,请考虑一个函数,我告诉您我将把数字 0 到 N 移动到 0 到 N-2 的范围。事实上,这个变换只是没有逆变换。您可以使用浮点计算或多或少准确地表示它(f(x) = x*(N-2)/N),但一些相邻值将映射到整数数学中的相同结果(鸽巢原理!)。这是一种简化并“压缩”范围,但是在像您正在使用的这样的任意仿射变换中也会发生同样的事情。

如果你有浮点数的 r、g、b,并保持这种状态直到量化为整数,那将是一个不同的故事 - 但在整数中,你一定会看到原始值和逆值之间的一些差异。

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

JPEG: YCrCb <-> RGB 转换精度 的相关文章

随机推荐

  • 如何使用 CSS 禁用表单字段?

    是否可以使用 CSS 禁用表单字段 我当然知道禁用属性 但是是否可以在 CSS 规则中指定它 就像是
  • 枚举在自定义初始值设定项中不起作用

    我在类初始值设定项 名为 Building 的类 中使用名为 BuildingType 的枚举变量 这个枚举是在类之外定义的 因为我也想在其他地方使用它 初始化变量 typeOfBuilding 时 此枚举的自动完成功能无法正常工作 示例代
  • 在android中的垂直列表中实现horizo​​ntalList

    我制作了一个自定义的水平列表视图 效果很好 然后我在 ListView 控件内实现了相同的水平列表 但是当我运行相同的命令时 我得到的只是空白输出 该列表似乎没有填充 在调试时 我发现添加到列表视图的适配器包含项目 水平列表 因此 问题显然
  • iOS Monotouch UIImagePickerController 来自相机的多张照片/视频

    我们在 UIImagePickerController 上遇到了一个奇怪的问题 在我们的应用程序中 用户可以填写一系列表格 并在这些表格中附加图像和视频 我们允许用户从相机胶卷中添加多张照片 视频 或者在填写表格时添加多张照片 视频 我们使
  • 如何匹配一个单词,在文件中一遍又一遍地打印该行和下一行

    注册员希望解析包含许多学生数据的文本文件 输入文件 多个学生数据的文本文件 每个学生文件的格式相同 我已经成功地找到了一个 模式 并将其打印到文件中 这是我需要的 75 有一种情况 我需要在找到匹配项并打印匹配行后打印下一行 这就是我迷路的
  • JSONObject - 如何获取值?

    我正在使用 java 类http json org javadoc org json JSONObject html 以下是我的代码片段 String jsonResult UtilMethods getJSON this jsonURL
  • 为什么实体框架调用我的存储过程但返回不正确的值?

    我有一个存储过程 它只是返回记录总数除以传入的任何值 这有助于网站上的分页 但是 我正在使用实体框架绑定到该存储过程并且它返回 1对于所有对它的调用 当我使用 SQL Management Studio 询问存储过程时 它会返回正确的值 我
  • 自动类型推导中的常量

    我正在阅读 Scott Meyers 的 Effective Modern C 第 1 项包含以下示例 template
  • 小胡子和哈姆尔

    我有这个 haml mustache 模板 data ok items item b ID id item items data 我有Illegal nesting nesting within plain text is illegal
  • 条件资源创建 WPF XAML 设计/运行时

    继第一个问题之后WPF 级联绑定 我说我有资源多于预期两者中都定义了主窗口和用户控件 这在Snoop the 主窗口 XAML有一个 MainWindow ViewModel 的 实例 用于绘制 2 个用户控件green and blue
  • map[string]*type“无效的内存地址或零指针取消引用”

    当我尝试访问结构字段时出现错误 无效的内存地址或 nil 指针取消引用 gdreport main go 30 0x1e6 我不知道这个错误 这是我的代码 var strPtr string var findingId string str
  • 根据rtl或ltr语言自动设置方向和文本对齐

    我们可以设置direction财产为body指示方向的标签rtl to ltr 同样我们可以设置text align各个元素的属性 有没有什么方法可以最小化或集中编码工作来设计一个可以同时支持这两种功能的应用程序LTR 英语 和RTL 阿拉
  • Drive API - 下载/上传 sql 数据库

    我目前正在下载我使用驱动 API 上传的 SQL 数据库 肯定有一个备份 但是当我尝试打开该文件时 我收到一条错误消息 指出该文件无法打开 EDIT 我解决了上面的问题 现在我想最终上传和下载sql数据库 我在互联网上找到了可以下载和上传的
  • 一种在Python中从数据对创建簇的算法

    我正在寻找一种智能算法或Pythonic 方法来从数据对创建集群 输入数据的结构如下 productA ProductB productB ProductC productC ProductD productA ProductD produ
  • Bokeh DataTable 在触发(“更改”)后不会更新,无需单击标题

    散景版本 0 10 蟒蛇 3 4 木星 4 x 目标 创建一个仅显示从散点图中选择的数据的表 问题 DataTable 仅在单击后才刷新 尽管 s2 trigger change 在 Bokeh 网站的其他示例中 一 绘图将使用此技术更新另
  • justify-content:第一个和最后一个项目之间的间距也相同[重复]

    这个问题在这里已经有答案了 我想使用 flexbox 来设置一个简单的弹性 网格 container display flex flex wrap wrap justify content space between but 我希望外边距等
  • .xcconfig?如何设置环境变量

    我是 Xcode 新手 在过去的两天里 我试图弄清楚如何在访问网络服务的 iPhone 上测试我的应用程序 在模拟器上 我可以使用硬编码的 localhost 变量 但我不想硬编码所有配置设置 我正在使用 Swift Xcode 6 但我认
  • 数组初始化之间的差异

    请参阅以下声明 char a 5 jgkl let s call this Statement A char b jhdfjnfnsfnnkjdf let s call this Statement B and yes i know thi
  • 基于相似单词序列的字符串聚类

    我正在寻找一种有效的方法 根据相似单词序列的出现将大约 1000 万个字符串聚类成簇 考虑一个字符串列表 例如 the fruit hut number one the ice cre am shop number one jim s ta
  • JPEG: YCrCb <-> RGB 转换精度

    我已经使用 JPEG 转换公式实现了 rgb gt ycrcb 和 ycrcb gt rgb 转换 http www w3 org Graphics JPEG jfif3 pdf 同样在 http en wikipedia org wiki