关于色彩模型的最新成果

已经有一个多星期没有写开发日志了,不过这并不表示没有任何进展,相反,在这一周中,色彩模型已经经历了几次重大的变化。

首先,考虑下面几个基本的问题:

  1. 索引应当是一种存储格式,而不是颜色模式。
  2. 每个颜色数据还应带有一个 Alpha 值。
  3. 只有 Lab 颜色(甚至可以采用 32 位)是绝对的,其它的颜色都不能独立存在,而需要色彩管理文件。

下面来慢慢讨论:

之前混淆了颜色与像素的概念,导致一直将索引模式也作为颜色模式来考虑,后来才发现这完全错误了。Photoshop 的颜色模式只是它的工作模式,表示像素的存储方式,而真正的颜色模式并没有那么丰富——就算是索引模式,它最后还是需要指向具体的颜色信息。因此,索引模式只是使用索引方式来存储 RGB/8 颜色信息而已。这样一来,所有的颜色都将归结为“通道色”的概念,每个颜色由一个或多个通道组成,各通道采用相同的颜色位深度,具有各自的连续取值范围。

除了本身的通道之外,每个颜色数据还带有 Alpha 值。在存储上,Alpha 值与其它通道值(如 R、G、B)是完全平等的,有自己的取值范围,与其它通道使用相同的位深度。如果也将其视为一个通道,那么可以与其它通道使用相同的处理机制,看起来是一个很不错的选择。然而,很快这种想法就遇到了麻烦:事实上,当两个颜色进行混合时,Alpha 值和通道值并不平等:

R = R' * alpha + R * (1 - alpha)
G = G' * alpha + G * (1 - alpha)
B = B' * alpha + B * (1 - alpha)

也就是说,Alpha 值与其它颜色分量通道的实质并不相同,它是一个“附加值”。

不同的颜色模式之间的转换好像很容易,其实不然。虽然网上有很多转换公式,但几乎没有人提到色彩管理文件的概念。事实上,如果没有色彩管理文件,RGB 与 CMYK 颜色之间根本没有转换关系,因为它们都只是一个相对颜色。这样一来,我们的模型中必然要再引入色彩管理文件的概念,而不同颜色模式之间的转换是由相应的色彩管理文件进行的。于是,与颜色值本身相关的有两套类型:颜色模式(ColorMode)与色彩管理文件(ColorProfile)。ColorMode 用于定义混合颜色所用的通道信息,包括每个通道的名称、位深度、取值范围等等;而 ColorProfile 用于定义颜色模式与 Lab 绝对颜色之间的映射关系。

颜色模型之所以难以处理,其实并不在于 RGB、CMYK 等各种模式。当“通道色”概念出现以后,所有的不同模式都已经化归为一了。真正的麻烦在于颜色深度:除了位图是 1bpc(bit per channel)以外,还有 8bpc、16bpc 和 32bpc。当返回通道的值的时候,它们对应着完全不同的数据类型(Byte、Int16、Single)。返回类型是没法多态的,而这三种数据类型之间又存在的本质的差别(整数与浮点),无法在字节层面上统一运算。颜色概念本身的抽象、颜色类型的复杂度及处理数据的性能问题之间产生了巨大的矛盾。为了解决这个矛盾,我决定将浮点改为整型,将 32bpc 的颜色值使用 Int32 来存储和运算——事实上并不会丢失精度。于是,产生了一个特别的想法:将所有颜色的数据都视为连续的 Int32 数组,然后通过为每个精度设置掩码和偏移量,用位运算得到具体的通道分量。例如:ARGB 色 0xFF336699,R 通道的掩码就是 0x00FF0000,偏移量即 16,这样,就有:

r = (value & mask) >> offset

这个方式把位数长度也化归了,我曾一度认为这是一个完美的解决方案。然后很快就出现了新问题,像 CMYK 这样的颜色模型,加上 Alpha 通道就是 5 个分量,如果使用刚才的方式,一个颜色占用 8 个字节(2 个 Int32 长度),但却只有 5 个字节用来保存信息,3 个字节被严重浪费了。

带着这个问题,我又去研究了 Photoshop 的存储行为,想看看它会不会产生这种因字节对齐而导致的空间浪费。结果自然是没有,一个 100 像素的单层图像,RGB 模式下就是 400 字节(还要加上透明度),CMYK 模式下就是 500 字节,完全没有浪费。而更令我吃惊的是:如果图像并没有用到每个通道,或者是某个通道的内容完全是纯色的时候,这个通道根本不产生数据!也就是说,如果 RGB 模式下某图像的 R 通道内亮度没有任何变化的话,那就只有 300 字节的内存使用;如果连透明度也没有的话,就只有 200 字节的内存使用。这个现象证明 Photoshop 是以通道为单位来存储位图的,而不是像素。说得清楚一些就是:它将位图分成了若干个通道,每个通道是一个只包含亮度信息的灰度位图。

于是,颜色及位图的模型将再次经历一次洗礼。

### 最新 OCR 模型的技术进展 当前 OCR 领域正在经历快速发展,尤其是随着大模型时代的到来以及跨模态技术的进步,OCR 模型逐渐趋向于更加统一化、多功能化的方向发展。以下是关于最新 OCR 模型的一些重要技术和实现方法: #### UPOCR:像素级 OCR 统一模型 UPOCR 是一种全新的 OCR 解决方案,旨在通过 **统一范式 (Unified Paradigm)**、**统一架构 (Unified Architecture)** 和 **统一训练策略 (Unified Training Strategy)** 来解决传统 OCR 方法中存在的碎片化问题[^1]。具体来说: - **统一范式** 提供了一种通用的解决方案,能够同时应对多种 OCR 场景,例如文字检测、字符分割和语义理解。 - **统一架构** 将多个子任务集成到单一网络结构中,从而减少了计算开销并提高了效率。 - **统一训练策略** 则允许模型在不同数据集上进行端到端的学习,进一步增强了其泛化能力。 这种设计使得 UPOCR 不仅能够在标准场景下表现出色,还能轻松适应复杂背景或低质量图片中的文本提取任务。 #### GOT 模型及其分阶段训练方式 GOT 模型代表了另一种先进的 OCR 技术路线,它采用了分阶段式的训练流程来逐步优化性能[^2]: 1. 在第一阶段,通过对 encoder 进行高效的预训练引入大规模基础视觉特征; 2. 第二阶段则专注于联合调整 encoder 和 decoder 的参数配置,利用 Qwen 团队预先构建的小规模解码器版本加速收敛过程; 3. 至于最后一步,则固定住编码部分而集中精力改进解码模块的功能特性——比如支持特定条件下的精细化操作(如位置指引或者色彩过滤),亦或是针对特殊需求定制额外的能力扩展(像动态尺寸适配或多页面连续解析)。 这种方法不仅有效降低了整体资源消耗水平,而且显著提升了最终产品的实用价值和服务范围。 #### 大语言模型与文档处理融合趋势 除了上述专门面向光学字符识别领域内的创新成果之外,在更广泛意义上讲,“大型语言模型(LLMs)”也开始深入参与到各类文件资料智能化管理工作中去[^3]。这些强大的工具可以协助完成诸如自动摘要生成、关键词抽取甚至全文翻译等工作;与此同时它们还具备很强的情境感知力,因此当被应用于某些高度专业化的内容类型时往往能取得意想不到的效果。 对于希望实际部署此类先进算法的企业和个人开发者而言,通常可以从官方开源项目主页获取相应源代码及相关依赖环境说明文档链接地址,并按照指示安装运行测试验证各项核心功能是否正常工作即可开始正式投入使用前的各项准备工作。 ```python import torch from transformers import DonutProcessor, VisionEncoderDecoderModel processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base") model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base") def predict(image_path): image = processor(torch.tensor(image_path), return_tensors="pt").pixel_values outputs = model.generate(image) prediction = processor.decode(outputs[0], skip_special_tokens=True) return prediction ``` 以上是一个简单示例展示了如何加载 DONUT 模型并通过给定输入图像路径预测输出序列的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值