提升色觉障碍用户的视频观看体验——播放器色觉辅助功能开发

本文包含以下内容
1.简单介绍人眼彩色视觉的基本原理
2.介绍如何利用算法模拟色觉障碍用户所看到的画面
3.基于色觉障碍模拟算法,介绍几种色觉障碍辅助方法,这些方法可以帮助色觉障碍用户更好地分辨本来难以分清的颜色
4.介绍如何在Android播放器中集成色觉障碍辅助功能以及我们提供的示例库


所谓色觉辅助功能,就是帮助色盲、色弱人群更好的观看视频。比如下面的画面,是红绿两队在进行足球比赛
这里写图片描述
那么一位患有红绿色盲的用户看到的画面可能是下面这样的
这里写图片描述
可以看到,由于患有红绿色盲,这位用户将难以区分出比赛中的红绿两队,这势必会影响用户的观看体验。所谓色觉辅助功能,就是帮助这样的特殊用户更好地观看视频,经过色觉辅助优化,我们可以做到让红绿色盲看到的画面变成下面的样子
这里写图片描述
可以看到,此时患有红绿色盲的用户也可以很好地分辨出比赛中的两支队伍了。需要注意的是,因为色盲与色弱的根本成因是生物染色体层面上的,所以不管我们如何做优化,都不可能让一名红色盲用户重新看到红色,而只能在最大程度上帮助他恢复出他所看不到的画面信息。

色觉障碍辅助功能并不是我们最先提出与实现的。从Android L开始,在原生Android系统的“无障碍”选项中就提供了色彩校正的功能,可以让设备更适合色盲用户使用,不过国内手机ROM一般都没有开放这个功能;三星则推出了SeeColors应用,它可以测试出用户的色弱类型和等级,基于测试结果调整三星电视机的色彩设置,让色盲人士也能体验到丰富的色彩;腾讯视频也在安卓端全面上线了色彩辅助功能,帮助色盲用户在不破坏观看体验的同时,保持场景自然色彩、提升场景分辨能力并提高观看舒适度;一些游戏,如《战地1》,也提供了色盲模式供玩家选择。

在本系列文章中,我们将结合理论,算法与实践,介绍如何从Android视频播放器的角度,开发色觉辅助功能,最终实现多达十个档次的色弱与色盲辅助优化。希望能够抛砖引玉,为更多有兴趣开发此功能的团队提供一个思路,也希望能够多多交流,指出我们可能存在的错误与不足。


一、从人眼彩色视觉说起

我们知道,不同波长的可见光具有不同的颜色,如下图所示,短波长的光呈现为蓝色,长波长的光则呈现出红色。
这里写图片描述
对应到人眼中,有3种视锥细胞,它们具有不同的光谱敏感度(Spectral sensitivity),造就了人眼的三色视觉(Trichromacy)。一般来说,这三种视锥细胞按照它们的光谱敏感度峰值波长的顺序,分别被称为:短(S)、中(M)、和长 (L)的视锥细胞类型。S、M和L类别视锥细胞对单色光谱刺激的归一化响应光谱如下图所示
这里写图片描述
大致可以看出,L细胞对红色光更敏感,M细胞对绿色光更敏感,S细胞则对蓝色光更敏感。更具体地,这三种细胞的响应波长范围和峰值响应范围如下表所示
这里写图片描述
而色盲与色弱的成因就与这三种视锥细胞的缺失或功能缺陷有关。比如,L视锥细胞的缺失就会导致红色盲,而M视锥细胞功能的缺陷就会导致绿色弱。前面我们看到,L锥细胞和M锥细胞的敏感波段有所重叠,所以红色盲,绿色盲的症状相似,一般统称为红绿色盲。

据统计,全球约6%人口为色弱,约2%人口色盲,极少数为单色视觉(全色盲)。红绿色盲人口占全球男性人口约8%,女性人口约0.5%(因为红绿色盲是X染色体隐性遗传病)。蓝色盲患者则非常少见,一般认为是后天所得。

石原氏色盲检测图是常用于判断是否患有色盲与色弱的工具,考过驾照的朋友应该都不陌生,比如下图,从左到右,从上到下依次是数字8,29,5,3,15,74,26,42。
这里写图片描述
而红色盲患者看到的画面可能是下面这样的,可以看到,很多数字都看不清了,或者会看成别的数字
这里写图片描述
绿色盲患者看到的画面则可能是下面这样的,一样有很多数字看不清或看错,但是与红色盲患者看到的又有所不同。
这里写图片描述
再举一个有意思的例子,炒股的朋友都很熟悉的K线图,如下
这里写图片描述
那么一名红绿色盲患者所看到的K线图则可能是下面这样的,体验可以说是非常不好了。
这里写图片描述


二、算法模拟色觉障碍用户所看到的画面

研究色觉辅助算法的第一步是尝试用算法模拟色觉障碍用户所看到的画面。
色盲与色弱模拟的总体流程如下图所示
这里写图片描述
图中涉及到两个色彩空间,一个是我们熟悉的RGB色彩空间,一个是LMS色彩空间。

本文中会涉及到的各种色彩空间
RGB色彩空间:将红绿蓝三个通道作为笛卡尔坐标系中的x,y,z轴,所得到的对颜色的空间描述。
XYZ色彩空间:X,Y,Z是假想出的三原色,自然界中并不存在,而只是由RGB经过线性变换后得到的。因为基于RGB模型绘制的色度图存在着负区间,这使得计算和转换都不方便,XYZ空间就是为了让所有计算和转换都在正数区间而设计的。
LMS色彩空间:根据三种视锥细胞的刺激比例来描述各种颜色。
YUV/YCbCr色彩空间:做多媒体的朋友应该都很熟悉了,Y代表亮度,UV代表色度。
Lab色彩空间:Lab色彩空间是基于XYZ色彩空间得出的,比XYZ空间更接近人眼的感知,其中L为亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表蓝色。

RGB空间和LMS空间的相互转换都有现成的公式,即图中的U及其逆矩阵都是已知的。前面提到色盲与色弱的生理成因都与LMS三种细胞的缺失或缺陷有关,相应的,色盲与色弱模拟的关键就在于找出正常LMS空间到异常L’M’S’空间之间的转换矩阵T。


色盲模拟

这里参考以下两篇经典论文介绍色盲模拟的基本思路

  1. Brettel H, Viénot F, Mollon J D. Computerized simulation of color appearance for dichromats[J]. JOSA A, 1997, 14(10): 2647-2655.
  2. Viénot F, Brettel H, Mollon J D. Digital video colourmaps for checking the legibility of displays by dichromats[J]. Color Research & Application: Endorsed by Inter‐Society Color Council, The Colour Group (Great Britain), Canadian Society for Color, Color Science Association of Japan, Dutch Society for the Study of Color, The Swedish Colour Centre Foundation, Colour Society of Australia, Centre Français de la Couleur, 1999, 24(4): 243-252.

已知正常视觉人群能看到的颜色在LMS三维空间中,因为色盲的成因是某一种视锥细胞的缺失,所以色盲人群能看到的颜色应该在LMS三维空间中的一个二维平面上,具体到红绿蓝三种色盲,就是分别把RGB空间的颜色沿着L、M、S三个方向投射在不同的平面上,那么问题的关键是如何找到这个二维平面。

以红绿色盲的模拟为例,有下图
这里写图片描述
图中大的立方体是LMS色彩空间,小的立方体可以看做是RGB颜色在LMS色彩空间中的表示。

图中有三条直线(三个向量),它们的意义是:OE代表的是灰度颜色,即使是色盲人群也可以正常分辨,所以它一定在色盲人群所能看到的颜色面上;图中475nm这条线对应的是偏蓝色的光,实验发现红绿色盲患者可以正确的分辨这一颜色,所以这条线一定在红绿色盲人群所能观察到的颜色平面上;图中575nm这条线对应的是偏黄色的光,实验发现红绿色盲患者也可以正确的分辨这一颜色,所以这条线也一定在红绿色盲所能观察到的颜色平面上。

两条相交直线可以确定一个平面。现在我们得到了三条相交直线,即红绿色盲人群观察到的颜色集中在两个颜色平面上,分别是图中的深灰色平面和浅灰色平面。

那么对于某一颜色Q,红色盲看到的颜色相当于Q点沿L方向投射到对应的平面上,即图中Q’p点。绿色盲看到的颜色相当于Q点沿M方向投射到对应的平面上,即图中Q’d点。求Q和Q’之间的关系,也就得到了我们需要的T矩阵。

来回忆一点数学基础知识
1.向量的点乘: V1(x1,y1)V2(x2,y2)=x1x2+y1y2 V 1 ( x 1 , y 1 ) · V 2 ( x 2 , y 2 ) = x 1 · x 2 + y 1 · y 2 ,结果得到一个标量
2.向量的叉乘:
a(x1,y1,z1)×b(x2,y2,z2)=(y1z2y2z1)i(x1z2x2z1)j+(x1y2x2y1)k a ( x 1 , y 1 , z 1 ) × b ( x 2 , y 2 , z 2 ) = ( y 1 · z 2 − y 2 · z 1 ) i − ( x 1 · z 2 − x 2 · z 1 ) j + ( x 1 · y 2 − x 2 · y 1 ) k
结果得到一个向量,这个向量与原来两个向量都垂直
3.如果是两向量点乘为0,则两向量垂直; 如果是两向量叉乘为0,则两向量平行

先来考虑深灰色平面,设前面图中提到的OE直线对应的向量为E,475nm可见光对应的向量为A,OQ’p直线对应的向量为Q’,则 E×A E × A 得到的是深灰色平面的法向量,它与Q’垂直,即
(E×A)Q=0 ( E × A ) · Q ′ = 0

aL(Q)+bM(Q)+cS(Q)=0 a · L ( Q ′ ) + b · M ( Q ′ ) + c · S ( Q ′ ) = 0
其中
a=M(E)S(A)S(E)M(A) a = M ( E ) · S ( A ) − S ( E ) · M ( A )
b=S(E)L(A)L(E)S(A) b = S ( E ) · L ( A ) − L ( E ) · S ( A )
c=L(E)M(A)M(E)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值