首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 归档 标签 关于

滤镜背后的色彩科学:LUT 是什么?

2026-07-22 1 阅读 约10分钟阅读 Nnnobel
分享:
字号:
2026年07月22日 24 分钟阅读 滤 镜 背 后 的 色 彩 科 学: LUT 是 什 么? 主作者 关注 Nnnobel 少数派作者 Enchanted to meet u. Nnnobel 关注 Nnnobel 少数派作者 Enchanted to meet u. 联合作者 关注 Nnnobel 少数派作者 Enchanted to meet u. Nnnobel 关注 Nnnobel 少数派作者 Enchanted to meet u. Enchanted to meet u. 微信扫码分享 以图片分享 分享到微博 点击下方按钮可复制链接 分享 收藏 举报 前言 莫名其妙的「相机模拟」滤镜 如果你也常使用国内的某些移动端修图 App,能看到一个有些诡异的现象:在成百上千个滤镜中,专门出现了一个分类——「相机模拟」。 什么时候设备型号也能当滤镜了? 当你真的将这些所谓的「滤镜」套在你的照片上时,结果往往是迎合大众在互联网上对这个品牌刻板印象的认知,在某个颜色通道拉高饱和度鲜明度,最后得到一张充满味精感的成品。最幽默的是,笔者将自己用 Pocket 3 拍摄的照片再套上「Pocket 3 模拟滤镜」,得到的是一张蓝到快要溢出的废片。 可以看到左下角的「Pocket 3」滤镜,颜色实在是有点诡异。 让我们先抛开这些莫名其妙的滤镜,聊回这些频繁出现的品牌。 诚然,这些滤镜的效果大多是图一乐。但那些名字之所以能被拿来当作滤镜名称,似乎说明了一件事:我们对不同影像品牌的颜色,有着某种约定俗成的印象。「佳能味」「徕卡德味」「哈苏味」「富士味」……从近年来各大手机厂商喜欢找具有强烈影调风格的相机厂商联名这件事也可见一斑。 我们就以颇具代表性,并一直以「HNCS 自然色彩」这一方面进行营销的哈苏来看看。 「HNCS」有什么魔力? 哈苏的色彩长时间来一直被各大平台的各大博主反复吹捧。如果你经常刷摄影相关内容,应该很容易看到类似的说法:哈苏颜色很「高级」,哈苏直出很「自然」。这些词听起来都很抽象,甚至有些玄学。 图源:Hasselblad 官网 哈苏对自己色彩表现的 官方说法 ,叫做哈苏自然色彩解决方案(Hasselblad Natural Colour Solution,简称 HNCS)。看起来很高深,对吧?但如果你仔细顺着哈苏官网对 HNCS 的介绍页看下去,会发现哈苏其实很直接: Hasselblad’s understanding of natural colors brings together HNCS. It includes an independently developed Hasselblad look-up-table (LUT), Hasselblad Film Curve, and unique color processing that together adapts to any illumination. The color data undergoes a series of transformations that remap the captured values. This ensures true contrast, rich saturation, and tricky subtle tones – like skin tones – are kept smooth, even between highlights and shadows. 翻译过来大意是:HNCS 的核心,是一张自主研发的哈苏颜色查找表(LUT),配合哈苏胶片曲线以及独有的色彩处理流程,共同完成对不同光照条件的适配。 这其中主要起作用的就是 LUT,即本文将要讨论的对象。 Look-Up Table LUT,全称 Look-Up Table,翻译过来就是「查找表」。这个词本身其实不是影像圈发明的,稍微学过一点编程的人应该更熟悉。查找表是计算机数据结构里一种常见的优化手段,思路很简单:与其每次都临时计算一个结果,不如提前把所有可能的输入和对应的输出算好,存成一张表,简单的查询操作替换运行时计算的数组或者哈希表,牺牲一定的空间效率换取时间效率。从内存中提取数值经常要比复杂的计算速度快很多,能省去重复运算的开销。 你也可以把 LUT 简单理解为一个离散化的函数(即不连续,有限个采样点),比如下面这个例子,提供一个输入值,经过 LUT 后输出映射值: 输入(x) 输出(x²) 1 1 2 4 3 9 4 16 5 25 更准确地说,LUT 是把某个函数的结果提前采样、离散化并存起来。使用时,它不再重新计算完整函数,而是通过查表,得到输出结果。 放到图像处理这件事上,逻辑是一样的。一张 LUT,本质上就是一份「颜色到颜色」的映射关系,将索引号与输出值建立联系:给定特定图像中每一像素的输入颜色数据,去表里查该颜色数据对应映射的是哪一个新的颜色数据,就能拿到对应的输出颜色。 简单的套 LUT 流程示例 1D LUT 对于灰度图像来说,一个 1D LUT 的结构和上述演示Look-Up Table 的例子十分类似,是一个一对一的列表。我们设所使用的图像为8-bit 色深(颜色深度,表示一个像素点中可以显示的色阶数) ,有 2⁸ = 256 阶灰度值,即 0 - 255。同样,我们举一个简单的例子: 输入 输出 1 3 2 5 ... ... 254 249 255 251 只要将每个像素的灰度值进行替换就能完成。 这类的1D LUT ,可以方便地调整图像的Gamma 值、RGB 平衡、白场等基础响应关系。 RGB 的 1D LUT 上述讲的是灰度图像的情况,只有一个通道需要处理。彩色图像会复杂一层——每个像素由 R、G、B 三个数值组成,如果想用 1D LUT 的思路来处理彩色图像,最直接的做法就是把这套逻辑分别应用在 R、G、B 三个通道上,各自独立地进行处理。 用简单的伪代码演示,我们也能看出这种分通道处理的逻辑(代码中的r_lut、g_lut、b_lut 为 R、G、B 三个通道对应的颜色查找表): r_lut = [0, 2, 5, 9, ..., 250, 255] # 长度 256,索引是输入值,元素是输出值 g_lut = [0, 1, 4, 8, ..., 248, 255] b_lut = [0, 3, 6, 10, ..., 252, 255] def apply_1d_lut(pixel): r, g, b = pixel return (r_lut[r], g_lut[g], b_lut[b]) 每个通道的映射规则,只取决于这个通道自己的输入值,跟另外两个通道当前的输入值无关。三个函数各自独立,互不耦合。这种结构的存储成本很低——三张长度 256 的表,一共 256 × 3 = 768 个数据点,就能覆盖 8-bit 图像里每个通道所有可能的输入值,连插值都不需要,因为每一个整数输入都有精确对应的输出。 「曲线」中的 1D LUT 你其实早就在用 1D LUT 了。修图软件里的「曲线」工具,本质上操作的就是这张表——你在曲线上往上拖一个点,相当于往函数里改写了一条映射规则。
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱