文章

自适应色差辨别精度测试

自适应色差辨别精度测试

用 CIEDE2000 与 4PL IRT 构建浏览器端色差辨别精度测试

人眼究竟能够分辨多小的颜色差异?这个问题看似简单,实际却受到屏幕素质、环境光、视觉疲劳、颜色所在区域以及测试交互方式等多种因素影响。若只是依次展示若干组固定色块,再根据正确率判断用户的辨色能力,往往需要大量题目,而且很难准确定位用户真正的视觉阈值。

一种更有效的方法,是把色差测试建模为自适应测量问题:系统根据用户前面的作答结果,动态估计其潜在辨色能力,并不断选择当前最有信息量的色差继续测试。本文介绍一个完全运行在浏览器端的色差辨别精度测试原型。系统使用 CIEDE2000 衡量色差,通过四参数逻辑斯蒂项目反应模型(4PL IRT)描述作答概率,使用最大后验估计更新能力值,并根据标准误决定测试何时结束。

使用 CIEDE2000 描述颜色差异

为了进行色差测试,首先需要一个尽可能符合人眼感知的颜色距离指标。直接计算 RGB 三个通道的欧氏距离并不可靠,因为 RGB 数值主要服务于设备显示,其数值差异与人眼感受到的差异并不成比例。该测试采用 CIEDE2000 色差公式,并使用 $\Delta E_{00}$ 表示两个颜色之间的感知差异。

通常可以进行如下直观理解:$\Delta E_{00} > 10$ 时差异非常明显;$5 \sim 10$ 时很容易辨认;$2 \sim 5$ 时可以观察到差异;$1 \sim 2$ 时差异较为微妙;小于 $1$ 时多数情况下非常难以察觉。这些区间只能作为经验参考,实际识别能力会受到显示设备、观察距离、环境亮度、颜色区域和个体差异影响。在网页中,每道题包含一个基准色和两个候选色块,其中一个候选色块与基准色完全相同,另一个候选色块与基准色存在指定的 $\Delta E_{00}$ 色差,用户需要在限定时间内选择相同的色块。

动态生成指定色差的颜色组合

测试不能只依赖少量预制颜色,否则用户可能遇到重复题目,测试路径也很容易被记忆。因此,系统需要在运行过程中动态生成颜色组合。网页中的颜色生成过程概括为:随机生成一个不过亮、不过暗的基础 sRGB 颜色;将其转换为 CIELAB;随机选择一个 Lab 空间中的变化方向;沿该方向逐步扩大偏移量;使用二分搜索寻找接近目标 $\Delta E_{00}$ 的位置;将新颜色转换回 sRGB;检查转换结果是否超出 sRGB 色域;对整数 RGB 结果重新计算实际 $\Delta E_{00}$。

由于浏览器最终只能呈现整数 RGB 值,颜色量化可能改变真实色差。因此,系统在完成转换后,还会根据最终 RGB 结果重新计算 $\Delta E_{00}$,并优先保留误差最小的颜色组合。

用潜在能力描述辨色水平

项目反应理论不会直接把”答对多少题”当作最终能力,而是引入一个潜在能力参数 $\theta$。在当前系统中,$\theta$ 越大,代表用户能够分辨越小的颜色差异。题目难度使用参数 $b$ 表示,系统通过以下关系把 $\Delta E_{00}$ 转换为 IRT 难度:$b=\ln\left(\frac{3}{\Delta E_{00}}\right)$。

这个映射具有几个方便的性质。当 $\Delta E_{00}=3$ 时,有 $b=0$。当色差变小时,题目更难,$b$ 增大;当色差变大时,题目更容易,$b$ 减小。由该公式反向求解,可以得到 $\Delta E_{00}=3e^{-b}$。因此,当用户能力值与题目难度相等,即 $\theta=b$ 时,系统对应的色差阈值为 $\Delta E_{\text{threshold}}=3e^{-\theta}$。这就是网页最终使用的能力值到色差阈值的换算公式。

为什么使用四参数逻辑斯蒂模型

在最简单的 Rasch 模型中,用户答对题目的概率为 :

\[P(U=1\mid\theta,b)=\frac{1}{1+e^{-(\theta-b)}}\]

但色差测试是二选一任务,即使用户完全无法识别色差,随机选择仍然有约 50% 的概率答对。此外,即使用户辨色能力很强,也可能因为手滑、注意力波动或三秒超时而答错。若模型假设高能力用户的正确率一定趋近于 100%,偶然失误就可能对能力估计造成过大的负面影响。

因此,该系统采用四参数逻辑斯蒂模型:

\[P(U_i=1\mid\theta,b_i)=c+(d-c)\frac{1}{1+e^{-a(\theta-b_i)}}\]

其中,$a$ 是区分度参数,$b_i$ 是题目难度,$c$ 是猜测下限,$d$ 是正确率上限。当前网页使用的主要参数为:discriminationA: 1.7guessingC: 0.5lapseD: 0.98priorSD: 2.5

猜测参数被设置为 $c=0.5$,这符合二选一任务的随机猜测概率。正确率上限被设置为 $d=0.98$,这意味着模型允许约 2% 的偶然失误。即使用户能力远高于题目难度,预测正确率也不会被强制推到 100%。当 $\theta=b$ 时,逻辑函数值为 0.5,因此 $P = 0.5+(0.98-0.5)\times0.5 = 0.74$。也就是说,系统中的色差阈值大致对应用户约 74% 的正确率水平,而不是经典 Rasch 模型中的 50%。

使用最大后验估计更新能力值

仅依靠最大似然估计,在测试初期可能出现能力值不稳定的问题。例如,用户连续答对前几题时,最大似然估计可能不断把 $\theta$ 推向很高的位置;连续答错时,则可能向另一个方向发散。由于早期样本很少,这种极端估计通常缺乏可靠性。

系统因此使用最大后验估计(MAP):

\[\hat{\theta}_{MAP}=\arg\max_\theta\left[\log P(\mathbf{u}\mid\theta)+\log P(\theta)\right]\]

其中,$\mathbf{u}$ 表示当前已经观察到的作答结果。系统为能力值设置均值为 0、标准差为 2.5 的正态先验:$\theta\sim N(0,2.5^2)$。对应的对数后验函数为:

\[\log P(\theta\mid\mathbf{u})=-\frac{1}{2}\left(\frac{\theta}{2.5}\right)^2+\sum_i\left[u_i\log P_i+(1-u_i)\log(1-P_i)\right]+C\]

这里的 $C$ 是与 $\theta$ 无关的常数,不影响最大值的位置。先验的作用并不是认定所有用户能力都处于平均水平,而是在数据不足时给估计值提供适度约束。随着答题数量增加,作答数据的影响会逐渐超过先验。

MAP 估计的数学推导

为了理解上述公式的来源,我们需要从概率模型的基本假设出发。

假设用户回答了 $n$ 道题,第 $i$ 道题:

  • 答对记为 $u_i=1$;
  • 答错记为 $u_i=0$;
  • 模型预测答对概率为 $P_i(\theta)$。

单道题实际出现当前结果的概率可以统一写成伯努利分布形式:

\[P(u_i \mid \theta) = P_i(\theta)^{u_i} [1-P_i(\theta)]^{1-u_i}\]

验证一下:如果答对 ($u_i=1$),结果为 $P_i^1(1-P_i)^0=P_i$;如果答错 ($u_i=0$),结果为 $P_i^0(1-P_i)^1=1-P_i$。

假设不同题目在给定能力 $\theta$ 后相互独立,全部作答结果的联合概率(即似然函数)为:

\[P(\mathbf u\mid\theta) = \prod_{i=1}^{n} P_i(\theta)^{u_i} [1-P_i(\theta)]^{1-u_i}\]

传统最大似然估计(MLE)会选择使该似然函数最大的 $\theta$:

\[\hat\theta_{\mathrm{MLE}} = \arg\max_\theta P(\mathbf u\mid\theta)\]

但在测试刚开始时,若用户连续全对,MLE 可能认为能力应该趋向无限大;连续全错时,则可能趋向无限小。为了解决这个问题,系统引入一个先验假设 $\theta\sim N(0,\sigma^2)$,其中代码中 $\sigma=2.5$。

根据贝叶斯公式:

\[P(\theta\mid\mathbf u) = \frac{P(\mathbf u\mid\theta)P(\theta)}{P(\mathbf u)}\]

因为分母 $P(\mathbf u)$ 与 $\theta$ 无关,所以寻找后验最大值时,可以忽略分母,转化为最大化分子:

\[\hat\theta_{\mathrm{MAP}} = \arg\max_\theta P(\mathbf u\mid\theta)P(\theta)\]

原本的计算涉及很多概率相乘:$\prod_i P_i^{u_i}(1-P_i)^{1-u_i}$。由于概率通常小于 1,连续相乘后数值可能非常接近 0,计算机容易出现浮点数下溢。取对数后,乘法变成加法,不仅数值稳定,也便于求导优化:

\[\log P(\mathbf u\mid\theta) = \sum_i \left[ u_i\log P_i + (1-u_i)\log(1-P_i) \right]\]

正态先验的密度为 $P(\theta) \propto \exp\left(-\frac{\theta^2}{2\sigma^2}\right)$,取对数后得到:

\[\log P(\theta) = -\frac{\theta^2}{2\sigma^2}+C\]

因此,最终的对数后验函数为:

\[\log P(\theta\mid\mathbf u) = -\frac{\theta^2}{2\sigma^2} + \sum_i \left[ u_i\log P_i + (1-u_i)\log(1-P_i) \right] + C\]

忽略常数 $C$,这就对应了代码中的实现:

1
2
3
4
5
6
let val = -0.5 * Math.pow(theta / priorSD, 2); // 先验部分

for (const item of responses) {
  // 似然部分
  val += item.u ? Math.log(P) : Math.log(1 - P);
}

网格搜索与黄金分割搜索

网页没有直接使用牛顿法计算 MAP,而是采用”粗搜索加精搜索”的方式。系统首先在指定区间内进行网格搜索:

1
2
3
4
5
6
7
for (let t = thetaSearchMin; t <= thetaSearchMax; t += 0.05) {
  const value = logPosterior(t);
  if (value > bestValue) {
    bestValue = value;
    bestTheta = t;
  }
}

网格搜索能够找到全局最优点附近的位置,也不会依赖初始梯度方向。找到最优网格点后,系统再在附近的小区间内使用黄金分割搜索,进一步逼近对数后验函数的最大值。这种方法的优势是实现简单、数值稳定,而且当前模型只有一个待估计的能力参数,搜索成本很低。如果未来扩展到多维能力模型,或者同时估计更多参数,则需要考虑牛顿法、拟牛顿法、期望后验估计或专门的数值优化器。

用后验曲率计算标准误

能力值本身只是一个点估计。为了判断结果是否稳定,还需要衡量能力估计的不确定性。系统在 MAP 估计点附近,使用中心差分计算对数后验函数的二阶导数:

\[\ell''(\theta)\approx\frac{\ell(\theta+h)-2\ell(\theta)+\ell(\theta-h)}{h^2}\]

,其中 $h=0.001$。

在最大值附近,对数后验函数的二阶导数通常为负值。系统将其相反数视为观测信息量:$I_{\text{observed}}(\theta)=-\ell’’(\theta)$。标准误近似为:$SE=\frac{1}{\sqrt{I_{\text{observed}}(\theta)}}$。对数后验曲线越尖锐,说明不同能力值之间的相对可能性差异越大,系统对当前估计越有信心,标准误也就越小。若对数后验曲线比较平缓,则说明附近较大范围的能力值都能够解释当前作答结果,估计的不确定性较高。

标准误公式的统计学来源

网页使用的公式 $SE\approx\frac{1}{\sqrt{I}}$(其中 $I=-\ell’’(\hat\theta)$)并非凭空而来,而是基于最大值附近的二次近似。

假设 $\hat\theta$ 是对数后验的最大点。在最大点附近可以使用泰勒展开:

\[\ell(\theta) \approx \ell(\hat\theta) + \ell'(\hat\theta)(\theta-\hat\theta) + \frac12\ell''(\hat\theta)(\theta-\hat\theta)^2\]

由于 $\hat\theta$ 是最大点,一阶导数 $\ell’(\hat\theta)=0$,因此:

\[\ell(\theta) \approx \ell(\hat\theta) + \frac12\ell''(\hat\theta)(\theta-\hat\theta)^2\]

令 $I=-\ell’’(\hat\theta)>0$(因为最大值处二阶导数为负),则有:

\[\ell(\theta) \approx \ell(\hat\theta) - \frac12 I (\theta-\hat\theta)^2\]

两边取指数还原为概率密度形式:

\[P(\theta\mid\mathbf u) \propto \exp\left[ -\frac12 I (\theta-\hat\theta)^2 \right]\]

将其与正态分布的标准形式 $\exp\left[ -\frac{(\theta-\mu)^2}{2\sigma^2} \right]$ 对比,可以得到:

\[I = \frac{1}{\sigma^2} \implies \sigma = \frac{1}{\sqrt{I}}\]

这里的 $\sigma$ 即为能力估计的近似标准误 $SE$。

直观理解:

  • 曲线越尖:二阶导数绝对值越大,信息量 $I$ 越大,标准误越小,能力估计越精确。
  • 曲线越平:很多不同的 $\theta$ 都能解释当前数据,信息量 $I$ 小,标准误大,结果越不确定。

代码没有手工推导复杂的 4PL 二阶导数解析解,而是采用数值微积分中的中心差分近似,既简单又具有足够的精度。

最大信息量选题

每次更新能力值后,系统都需要决定下一道题应该使用多大的色差。对于伯努利作答结果,单题信息量可以写为:

\[I(\theta,b)=\frac{\left(\frac{\partial P(\theta,b)}{\partial\theta}\right)^2}{P(\theta,b)\left[1-P(\theta,b)\right]}\]

网页通过数值差分近似概率对能力值的一阶导数:

1
2
3
4
5
6
const h = 0.001;
const p = probabilityCorrect(theta, b);
const pPlus = probabilityCorrect(theta + h, b);
const pMinus = probabilityCorrect(theta - h, b);
const dp = (pPlus - pMinus) / (2 * h);
const information = (dp * dp) / (p * (1 - p));

系统遍历允许的题目难度范围,并选择当前信息量最大的 $b$。这意味着下一题既不会明显过难,也不会明显过于简单,而是集中在用户当前能力附近。

Fisher 信息量的推导与直观含义

上述选题公式源自伯努利分布的 Fisher 信息量

单题作答结果 $U$ 只有两种可能 ${0,1}$,其概率为 $P(U=u) = P^u(1-P)^{1-u}$。单题对数似然为 $\ell = u\ln P+(1-u)\ln(1-P)$。

对 $\theta$ 求导(得分函数):

\[\frac{\partial\ell}{\partial\theta} = u\frac{P'}{P} - (1-u)\frac{P'}{1-P} = P' \left[ \frac{u}{P} - \frac{1-u}{1-P} \right]\]

通分化简分子 $u(1-P)-P(1-u) = u-P$,得到:

\[\frac{\partial\ell}{\partial\theta} = \frac{P'(u-P)}{P(1-P)}\]

Fisher 信息量定义为得分函数平方的期望:

\[I(\theta) = E\left[ \left( \frac{\partial\ell}{\partial\theta} \right)^2 \right] = \frac{(P')^2}{P^2(1-P)^2} E[(U-P)^2]\]

因为 $U$ 是伯努利变量,其方差 $\operatorname{Var}(U)=E[(U-P)^2]=P(1-P)$,代入后约分得到:

\[I(\theta) = \frac{(P')^2}{P^2(1-P)^2} \cdot P(1-P) = \boxed{\frac{\left(\frac{\partial P}{\partial\theta}\right)^2}{P(1-P)}}\]

直观含义: 要使信息量大,需要同时满足两个条件:

  1. 敏感度高:分子要大。意味着能力稍微变化,答对概率就明显变化,这道题才容易区分不同能力的人。
  2. 不确定性适中:分母 $P(1-P)$ 在 $P=0.5$ 时最大,在 $P$ 接近 0 或 1 时变小。如果某题几乎必对或必错,观察到结果后不会增加太多新信息。

因此,自适应测试会寻找那些概率曲线最陡、且当前答对概率接近中间值的题目,从而最高效地缩小能力估计的范围。

为什么不能让难度变化得太快

纯粹依赖最大信息量原则,在测试初期可能导致难度快速跳跃。早期标准误很大,能力估计会受到单次作答明显影响。若用户第一题答错,模型可能迅速扩大色差;下一题答对后,又可能突然缩小色差。这会使用户感受到题目难度剧烈震荡。

当前系统增加了难度步长限制:

1
2
const maxStep = 0.8;
bestB = clamp(bestB, lastB - maxStep, lastB + maxStep);

由于 $\Delta E_{00}=3e^{-b}$,当 $b$ 改变 0.8 时,色差大约会改变 $e^{0.8}\approx2.23$ 倍。因此,这个限制相当于避免相邻两题的色差变化超过约 2.2 倍。系统还在最终难度上加入少量随机扰动,以避免测试路径完全确定:bestB += random(-0.05, 0.05)。这种随机性不会显著破坏信息效率,却可以降低题目序列的机械感。

三秒限时

每道题的答题时间限制为三秒。限时设计可以减少用户反复对比、靠局部像素观察或长时间犹豫带来的非自然作答,也能够让测试更接近快速视觉辨别任务。但是,超时在当前系统中会被直接记为错误:const correct = !isTimeout && selectedIndex !== differentIndex

这意味着最终能力值不仅反映颜色感知能力,还会受到反应速度、设备触控延迟、用户是否熟悉交互方式、注意力状态、是否出现短暂卡顿以及是否误触等因素影响。四参数模型中的上限参数 $d=0.98$ 可以降低偶然错误的影响,但不能完全分离”看不出来”和”来不及选择”这两种原因。更严格的系统可以将超时作为独立反应类型,或者联合建立准确率与反应时间模型。

测试终止条件

系统至少要求用户完成 30 道题,并在标准误满足目标值后结束测试:const done = responses.length >= 30 && standardError <= 0.24。这一设计同时考虑了最低样本量和估计精度。只使用最低题数作为停止条件,可能导致不同用户获得的结果精度差异很大;只使用标准误作为停止条件,则可能在少量特殊作答模式下过早结束。同时使用两个条件,可以避免在数据过少时输出看似精确的结果。

当前实现中没有额外设置最大题数。如果用户的作答长期不一致,标准误可能迟迟无法达到 0.24,测试理论上可能持续较长时间。正式系统通常还应加入兜底条件,例如 if (answered >= maxQuestions) { finishTest(); },即使没有达到目标精度,也应在达到最大题数后结束,并明确提示用户当前结果的不确定性较高。

从能力值换算为视觉阈值

测试结束后,系统将能力值转换为 $\Delta E_{00}$ 阈值:$\Delta E_{\text{threshold}}=3e^{-\theta}$。例如,当 $\theta=0$ 时,阈值为 $\Delta E_{\text{threshold}}=3$;当 $\theta=1$ 时,阈值约为 $3e^{-1}\approx1.10$;当 $\theta=2$ 时,阈值约为 $3e^{-2}\approx0.41$。因此,能力值越高,换算出的 $\Delta E_{00}$ 越低,表示用户能够识别更加细微的颜色差异。需要注意的是,这个阈值是由模型参数和人为定义的难度映射共同决定的,它是当前测试体系下的测量指标,并不等同于经过实验室标准设备测得的绝对生理阈值。

阈值置信区间的非对称性

系统使用能力值的标准误构造 90% 区间:$\theta_{\text{low}}=\theta-1.645SE$,$\theta_{\text{high}}=\theta+1.645SE$。随后分别转换为色差阈值。由于阈值映射是指数函数 $\Delta E=3e^{-\theta}$,能力区间在 $\theta$ 尺度上虽然是对称的,转换到 $\Delta E_{00}$ 尺度后却不是对称区间。对应的阈值下界与上界为:$\Delta E_{\text{low}}=3e^{-(\theta+1.645SE)}$,$\Delta E_{\text{high}}=3e^{-(\theta-1.645SE)}$。这也是为什么系统不应该简单地写成”阈值 ± 某个固定数值”,指数映射会自然地产生非对称区间,更符合该能力尺度与色差尺度之间的关系。

能力轨迹与置信区间可视化

系统在每次作答后记录当前能力值与标准误:history.push({ theta: state.theta, se: state.se })。测试结束后,使用 Canvas 绘制能力变化曲线以及 90% 置信区间。在典型情况下,图表会呈现以下过程:测试开始时,能力估计接近先验均值,区间较宽;前几题会造成较明显的能力波动;随着系统不断选择高信息量题目,区间逐渐收窄;后期能力曲线趋于稳定;当标准误达到目标阈值时,测试结束。这种可视化比只显示一个最终数字更有解释力,用户能够看到系统是否真正收敛,也能理解为什么同样的点估计可能具有不同可信度。

前端实现中的交互与可用性设计

除了测量算法,网页还包含一些值得注意的工程设计。界面同时支持鼠标、触屏与数字键操作。按钮具有足够大的触控区域,并通过 focus-visible 为键盘用户提供明确焦点提示。页面通过 CSS 媒体查询自动适配深色模式,并使用 @media (prefers-reduced-motion: reduce) 降低动画效果,以照顾对动态效果敏感的用户。计时器同时使用动画进度条和文本倒计时。用户作答后,系统会暂时锁定按钮,避免重复提交,并显示正确、错误或超时反馈。Canvas 会根据设备像素比重新设置内部尺寸,以改善高分辨率屏幕上的绘制清晰度。这些设计并不直接改变测量模型,却会影响测试完成率、误触率和数据质量。

当前原型的优势

这个浏览器端系统已经实现了一条相对完整的自适应视觉测量链路:使用 CIEDE2000 定义颜色差异;在 CIELAB 空间中动态生成题目;检查颜色是否位于 sRGB 色域内;使用四参数 IRT 模型描述作答概率;将二选一猜测概率纳入模型;使用失误上限减弱偶然错误影响;通过 MAP 避免测试初期能力估计发散;使用后验曲率计算标准误;根据最大信息量原则动态选择题目;使用能力值输出 $\Delta E_{00}$ 阈值;提供非对称置信区间;绘制能力收敛过程。更重要的是,整个测试不依赖服务器即可运行,适合作为视觉测量算法的教学示例、交互原型或前期可行性验证工具。

从演示原型走向正式测量系统

若要把该原型用于更严谨的视觉能力评估,还需要解决若干关键问题。

设备与显示校准:不同屏幕的色域、白点、亮度、对比度、色彩管理和老化程度都不相同。同一个 RGB 值在不同设备上可能产生不同的实际光谱输出。正式测试需要记录设备类型,并尽可能建立显示校准流程。更严格的实验应使用经过校色的显示器和受控环境光。

浏览器颜色管理:网页假设浏览器按照 sRGB 进行渲染,但实际显示链路可能受到操作系统色彩配置、浏览器实现、广色域屏幕和 HDR 模式影响。可考虑使用 CSS Color Level 4、ICC 配置检测或预先校准图案来识别不兼容环境。

颜色区域差异:人眼对不同色相、明度和色度区域的敏感度并不完全一致。CIEDE2000 虽然已经对此进行修正,但不同用户仍可能在某些颜色方向上表现明显不同。当前系统随机选择 Lab 变化方向,并最终压缩为单一能力值。更深入的系统可以分别估计明度辨别能力、红绿方向辨别能力、蓝黄方向辨别能力以及不同色相区域的局部阈值,这会把单维 IRT 模型扩展为多维能力模型。

题目参数标定:当前题目难度由 $b=\ln(3/\Delta E)$ 直接计算,区分度、猜测参数和失误上限则使用固定配置。正式系统应收集大规模真实作答数据,对不同颜色区域、设备环境和 $\Delta E_{00}$ 水平进行项目参数标定。实际区分度可能并不恒定,猜测行为也可能受到左右位置、色块布局和时间压力影响。

位置偏差:正确色块会随机出现在左侧或右侧,可以减少固定位置偏差。但部分用户可能仍然存在持续性的左选或右选倾向。系统可以记录位置选择比例,并在检测到明显偏差时提高位置随机化约束,或者在报告中提示数据可能受到反应偏差影响。

超时与错误的区分:超时被直接记作错误,可能混合视觉能力和操作速度。后续可以同时记录反应时间,并建立联合模型 $P(U_i,T_i\mid\theta,\tau)$,其中 $\theta$ 表示辨色能力,$\tau$ 表示反应速度或时间能力。

最大题数与异常终止:系统应增加最大题数、页面失焦检测、连续超时检测和异常作答模式识别。当用户频繁切换页面、连续快速乱点或始终选择同一位置时,系统不应继续输出普通测评结果,而应提示本次数据质量不足。

正确理解测试结果

最终输出的 $\Delta E_{00}$ 阈值并不是一个脱离环境的永久能力值。它反映的是用户在特定条件下的综合表现,包括当前设备的显示能力、当前浏览器的色彩渲染、屏幕亮度和色温设置、环境光线、观察距离、用户此时的视觉与注意力状态以及三秒限时下的反应表现。因此,结果更适合用于同一设备、相似环境下的重复比较,而不适合直接比较来自完全不同设备和测试环境的用户。它也不能替代专业医学检查,例如色觉异常筛查、眼科检查或标准化的色相排列测试。

warning

本文由作者按照 CC BY 4.0 进行授权