ColorMatrix(颜色矩阵)简介
ColorMatrix(颜色矩阵) 是图像处理和图形学中用于批量调整颜色的数学工具。它通过一个 4×5 或 5×5 的矩阵,对图片每个像素的 R(红)、G(绿)、B(蓝)、A(透明度)通道进行线性变换,从而高效实现去色、变色、滤镜等效果。
核心原理:矩阵乘法
ColorMatrix 的本质是矩阵乘法。它将原色值 [R, G, B, A]乘以一个变换矩阵,生成新色值 [R', G', B', A']。
以常见的 4×5 矩阵为例,新颜色的计算公式如下(a~t为矩阵系数):
R' = a×R + b×G + c×B + d×A + e
G' = f×R + g×G + h×B + i×A + j
B' = k×R + l×G + m×B + n×A + o
A' = p×R + q×G + r×B + s×A + t
矩阵结构解读:
前四列(a~s):决定各通道的混合权重(如红色通道是否受蓝色影响)。
第五列(e~t):偏移量(Offset),直接给通道加减一个固定值,用于调整亮度或色调。
常见应用场景
通过修改矩阵参数,可以实现丰富的视觉效果:
效果
矩阵思路(示例)
说明
灰度化
将 R、G、B 按人眼敏感度加权平均(如 R:0.299, G:0.587, B:0.114)
实现黑白照片效果。
反色
对角线设为 -1,偏移量设为 1
即 R' = 1 - R,产生底片效果。
饱和度
增加主对角线系数,减小非对角线系数
系数越大,颜色越鲜艳。
色相旋转
使用三角函数构建旋转矩阵
改变整体色调(如变暖/变冷)。
亮度
保持对角线为 1,仅增加偏移量(e, j, o)
所有颜色同时变亮。
实际应用领域
ColorMatrix 不仅是一个数学概念,更是多种技术栈的通用底层能力:
Android 开发:android.graphics.ColorMatrix类,用于实现图片滤镜、高对比度 UI 等。
Web 前端:SVG 滤镜 <feColorMatrix>或 CSS 的 filter属性,用于网页图片的实时调色。
游戏与桌面端:DirectX、GDI+、Unity 等图形引擎中,用于后处理(Post-Processing)效果。
单位矩阵:不变的基准
单位矩阵是 ColorMatrix 的“原点”,应用后图片颜色不变。它是理解变换的基准:
[ 1, 0, 0, 0, 0 ] // R' = R
[ 0, 1, 0, 0, 0 ] // G' = G
[ 0, 0, 1, 0, 0 ] // B' = B
[ 0, 0, 0, 1, 0 ] // A' = A
所有滤镜效果都是从这个矩阵出发,微调对角线(缩放)或偏移量(平移)来实现的。