关于国画色彩分析
关于国画色彩分析的研究目标,大致可以归纳为:分析画作中的主要颜色的占比/直方图,分析其与国画标志性色彩/颜料的相似度和演变关系,以及在此基础上的相关研究,包括但不限于画心提取、国画色彩修复等等。以下总结相关的论文和方法。
在了解这些内容之前,最好对颜色基本理论有个大概的认知。这里有个台湾师范大学的教职员工个人网页对此有简单总结。包括如下概念:
- Color Theory(色彩理论)
- Color Perception(色彩感知)
- Color Space(色彩空间)
- Color Model(色彩模型)
- Color Gamut(色域)
- Color Palette(调色盘)
- Color composition(颜色混合)
- Color Decomposition(颜色分解)
- Color to Grayscale(颜色转灰阶)
- Grayscale to Color (灰阶转颜色)
- Color Correction(颜色校正)
1.从一张图片中提取主要颜色
这个工作的要求是,统计一张图中所有像素的颜色,将其中最常出现前N(N<10)种颜色统计出来。通常的做法是使用K-means聚类算法,将最常出现的前N种颜色直接计算得出。
虽然K-means也可以自己做,但早有人写了方便的工具Image Color Summarizer可以做同样的事。该工具可以输出 rgb、hex、hsv、lab、lch、xyz、cmyk模式颜色值,以及提取所需颜色,每种颜色占比。该工具有在线模式和本地模式,前者方便访问,用户可以随时提取一张图片的主要颜色;后者便于批处理,用户可以在本地部署后批量提取大量图片的主要颜色。
虽然openCV之类的库包含的提取颜色直方图(其结果如上图中最下的RGB直方图),但颜色直方图跟提取画作中的主要颜色还是两码事。
2. 比较主要颜色与国画标准颜料色彩的相似度
首先我们已经有了一个国画标准颜料色彩的RGB、CMYK数值列表。那么已知颜色值X和颜色列表Array[A1,A2, ..... , An],如何在颜色列表Array中选出与X最接近的颜色?
先将颜色值X和颜色列表Array[A1,A2, ..... , An]中所有值都转换成lab空间的表示值。这是因为lab空间相对于RGB等色彩空间更接近于人眼对色彩的理解。
然后依次遍历计算X与A1, A2, ......, An的颜色距离,取颜色距离最低者即可。目前颜色距离的量化公式有两类,分别是色彩空间内的欧氏距离,和国际照明委员会推荐的较为复杂但更接近人类知觉的公式CIEDE2000。
3. 画心与装裱分离
但是以上方法是直接将国画的RGB图像进行颜色聚类,这样的话就会把照片中不属于国画本体的部分(比如装裱部分)也算进去,从而导致分析结果失真。因此首先得把国画的画心部与装裱部分分离。
这一步可以使用计算机视觉中的语义分割来做,区分出前景(画心)和背景(装裱)。考虑到国画标注数据量并不大,所以这需要小样本学习比较好。例如浙大的这片文章:Feature-Proxy Transformer for Few-Shot Segmentation
4.留白与色彩分离
以上步骤是提取的画心,但是还未中国唐朝末年以后的国画,开始逐渐流行“留白”这种风格。也就是说不会像油画那样用颜料涂满整个画布或画纸,而是会留下很多画布或画纸的本色空间。如果计算国画所用颜料的时候把这些画布或画纸的颜色也算进去,那显然会对颜料分析造成干扰。因此需要把国画的“有颜色”的部分提取出来。直接提取“有颜色”的部分恐怕不太容易,但反过来把“画布或画纸的颜色”提取后再做“有颜色”的部分的提取就容易地多。具体提取留白,也可以采用语义分割的方式来做。具体可以参考这篇文章:A computational study of empty space ratios in Chinese landscape painting from 618–2011
5. 色彩合成和色彩分解
之前我们通过像素聚类再计算与色表的颜色距离的方式,还原国画绘画时实际采用了哪些颜料,其实是不太符合实际的。因为真实绘画过程中,很多中间色实际是其他颜色调和而成的。也就是说,色彩聚类出的主色,并不一定是与其颜色距离最接近的颜色画的,而很有可能是两种对比度差异很大的颜色调和而成的结果。因此从图像重建出调色板的过程,并不是算个颜色距离这么简单。
从一副画作中还原它所用的调色板,这个工作本质上是色彩合成(Color Composition)的逆过程:色彩分解(Color Decomposition)。色彩合成和色彩分解,一直是艺术、设计和可视化中视觉应用的一个重要方面,长期以来就被计算机图形学、图像处理、计算机视觉的研究者进行着研究。
色彩合成研究多种颜色混合后如何变成新颜色。不过计算机领域的那么多色彩空间,从设计之初都没有仔细考虑过多种颜色是混合后的结果该如何计算。所以想在计算机屏幕上直观地展示颜色混合并非易事。
因此,计算机图形学领域在90年代引入了kubelka-munk理论用于计算混色。该理论是1931年由工业油漆喷涂的需求研发而来,它假设物体的颜色取决于物体表面着色剂对光的选择性吸收后散射出来的光线,构造了一个基于多种着色剂的光吸收系数、反射系数、浓度、层厚等参数来计算当前物体表面颜色的数学模型。使用该模型,一系列研究者做到了计算机对水彩画、油画、墨水和粉彩的逼真模拟,但是该模型一直没有用在普通绘图软件中应用。这是因为相对于RGB色彩空间中一个像素仅由三个通道(Red, Green, Blue)决定,kubelka-munk 混色模型中计算一个像素的颜色就需要更多通道(设调色板由15种颜色,则可能有45个通道影响像素颜色),这将带来极大的性能成本。因此要在RGB色彩空间中应用类似kubelka-munk 混色模型的混色效果,必须要跨越这一维度鸿沟,而这只有借助于机器学习方法。
直到2021年,在论文Practical pigment mixing for digital painting中,作者Sochorová 和 Jamriška对 kubelka-munk 颜料混合算法进行了调整,可以直接使用RGB 颜色空间。他们的“Mixbox”方法通过将输入转换为CMYK色彩空间加上残差(以解决色域差异),然后在嵌入空间中执行 kubelka-munk 颜料混合算法,最后以 RGB 色彩空间生成输出。这意味着,以后采用该方法的数字绘画软件将能够很大程度上模拟真实颜料调色的方式,从而更加拟真。再加上AI绘画提供的对甲方宝具(需求分析效率大幅提升),数字绘画未来真的不可限量。
另一方面,颜色分解就是从一张图原有的颜色中分解出由几种颜色组成的调色板。国外对于油画、水彩画已做过这样工作。例如水彩画有这篇文章:Pigment-Based Recoloring of Watercolor Paintings,和油画的这篇文章:Pigmento: Pigment-Based Image Analysis and Editing。这些文章都依赖于Kubelka Munk模型来预测图片对应于哪些颜色组成的调色板。具体的做法是将每个像素的颜色都理解为颜料的加权混合物。然后确定一组主着色系数,然后求解混合权重,将整个问题变为权重数值的优化问题。最终得到的调色板,可以使用Kubelka Munk混合算法重新创建RGB图像,重新创建的图像与原图只有很小的误差。
当然调色板的预测结果不是唯一的,因为预测过程有点像数学的傅里叶变换,同一张图可以对应多种调色板。如果配合金石学、考古学获得的一手资料,例如宋朝时某个地区常见的国画颜料的色彩,把这些色彩作为预测调色板的取值约束,那么就有极大可能还原当年绘制国画的真实调色板。
6. 关于进一步探索研究点的思路
虽然关于颜色合成和颜色分解,主流的方法只有kubelka-munk理论。显然国画也可以用同样的方法处理。但是将其应用于国画,一方面这事十有八九早被人做了,另一方面创新点也不足。对此有几种思路:
首先是对混色模型的改进。kubelka-munk理论也不是没有瑕疵的。一些具体的讨论可以参考它的wiki。但是显然改进混色模型在计算机中的实现不是我的长项,因为它们公式又长条件又多让人脑壳痛。
其次是可以考虑自动提取笔触的问题。使用kubelka-munk理论结合机器学习还可以在绘画中提取笔触(如形状、夜色、纹理、重叠)。具体可以参考这篇文章:Fast Accurate and Automatic Brushstroke Extraction
最后欢迎感兴趣的老师同学留言讨论。