4.1 需求分析
颜色恒常性算法作为图像处理的一般手段,不仅可以用于校正其他计算机视觉算法的输入,也可以作为白平衡效果供用户使用。随着计算机图像处理技术的普及化,用户倾向于在电脑上使用软件程序来对所拍摄的图像或者在网络上下载的图像做白平衡校正,以便后期的处理或分享。
除了白平衡之外,图像效果增强在图像处理中也十分常用,图像增强是指调节图像的一些参数从而突出其某些特征,它不仅可以提高图像质量,还可以根据用户需求调节图像的呈现效果。PIL库是Python图像处理的基础库,它是一个免费开源的第三方库,由一群 Python 社区志愿者使用 Python 语言开发而成。为了保证研究的实用性和易用性,本文借助于Python语言以及PIL图像处理库,设计并实现数字图像的颜色恒常、效果增强等,使得颜色恒常算法的应用更加简单直观,也便于用户的保存与分享。
在本章中,我们将提出的算法移植到Windows操作系统上,开发了一款可交互的图像颜色恒常性系统,以便用户进行后期的处理。该颜色恒常性系统集成了三个模块:图片文件的读取与存储、颜色恒常处理、图像效果增强,以及六个主要功能:自动白平衡(一键颜色恒常)、亮度修正、色温调节、对比度调节、色彩饱和度调节、平滑和锐化,通过拖动界面中的滑块实现。我们利用PyQt的信号-槽机制生成中间图像预览,系统的校正效果良好、用户体验流畅。
4.2 系统架构
4.2.1 开发环境
本研究实验部分基于Python 3.6的GPU版本、PyTorch 1.8.0实现,基于Windows的颜色恒常性系统的开发在PyCharm 2021.1.2 x64上进行,使用PyQt工具包来制作图形界面。PyTorch是一个基于Python的深度学习库,它可以支持GPU上加速的张量计算,不仅可以构建深神经网络,还有一套自动求导系统。PyQt库可以帮助创建界面程序,融合了Python语言与Qt库,由Phil Thompson 开发。PyCharm是一种Python IDE,可以辅助Python语言开发,支持一系列开发工具。
将深度学习网络应用在颜色恒常性系统中主要分为三个步骤:
(1)使用PyTorch训练模型;
(2)将训练所得的模型转换成颜色恒常性系统可以识别和使用的模型文件;
(3)在PyCharm上构建PyQt窗口程序工程。
PyTorch常用的保存模型的函数是torch.save(),可以将模型网络结构中的参数值保存为.pth格式。
4.2.2 PyTorch模型调用
开发者只需要将.pth文件保存到相应目录下,使用PyTorch中的函数torch.load()即可加载模型,步骤如下:
(1)把训练好的.pth文件放入颜色恒常性系统Python项目中的model/目录下
(2)在demo_single_image.py中修改如图4-1所示语句,将net1改为使用的模型名称:

图4-1 在demo_single_image.py中修改的语句
(3)运行ui.py,调用修改后的模型,生成颜色恒常性系统
4.2.3 架构设计
本章设计的颜色恒常性系统的架构如图4-2颜色恒常性系统架构图所示,可分为展现层、逻辑层、数据层。

图4-2 颜色恒常性系统架构图
一、展现层
本系统的交互图形界面使用PyQt工具包设计,主要包括颜色恒常按钮、图像编辑滑块、图片展示区、读取与保存按钮等控件。系统采用PyQt自带的信号-槽机制实现用户的按键处理,实时获取用户对图像的调整需求,将当前最新的图像处理效果显示在中央Qlabel控件上。图像的读取与保存都可以直接调用系统任务管理器对话框,从而增加用户操作体验和图像编辑的便捷性。
二、逻辑层
本系统的逻辑层主要实现系统核心的颜色恒常、图像效果调节功能。颜色恒常功能基于开发者训练好的模型,加载model目录下的.pth文件,对输入图像进行颜色恒常还原后输出整幅图像。图像效果调节功能调用PIL库对图像的亮度、锐度、对比度、饱和度进行调节,将控件上获取的调节信号转换为增益系数,色温变化逻辑通过重新计算图像像素值实现。在每次切换调整模式时,系统都会保存当前临时图像,从而实现效果叠加。用户调节后的图像将实时显示在系统界面中央的Qlabel控件上,并缓存在系统目录下等待保存。
三、数据层
本系统为功能简洁的图像编辑器,数据层上无需大量存储空间,也不需要建立数据库,从而实现轻量化。数据层仅缓存输入图像与当前效果图像,分别为input.jpg与tmp.jpg。
4.3 模块设计

图4-3 颜色恒常性系统设计框图
根据设计需求,我们的颜色恒常性系统包含对图像文件进行读取或存储、图像效果增强、一键颜色恒常的模块,并根据用户使用习惯,参考主流图像编辑器界面,对GUI用户界面进行设计。模块设计如图4-3所示,该系统包含六类图像处理功能,每一个功能都对应一个控件来进行输入。用户运行系统后即可到达主界面的模块集成区,操作相应控件即可实现每项功能。
一、GUI用户界面模块
本系统的GUI用户界面设计分为了四步:
- 明确系统所要实现的功能,应当具有哪些模块;
- 预先描绘出基本的用户界面草图;
- 根据确定好的方案,利用Qt Designer制作用户操作界面,添加相应的控件;
- 进行槽函数的编写,并将信号与相应槽函数进行绑定,从而实现界面上图像实时预览的功能。
我们通过PyQt中的Qlabel控件直观地实现了图片展示,即使对图片的基本处理都能够直接表现到GUI中。我们的颜色在恒常系统的界面为图4-4。

图4-4 颜色恒常性系统主界面
颜色恒常性系统的操作流程图如图4-5所示。用户首先运行系统,在系统的界面内,点击选择图片的按钮来选择需要进行编辑的图像。选择完毕后,图像会出现在图片预览区。用户根据自己需要,点击AWB按钮对图像进行颜色恒常,或者拖动滑块调节参数进行图像效果增强。当图片预览区的图像满足用户需求时,可以点击保存图片按钮选择图片要保存的路径,确认过后图像将会存储于该路径下。用户使用完毕点击叉号退出系统。

图4-5 颜色恒常性系统操作流程
二、图像文件的读取与保存模块
在不同模块处理同一图像,只需要在处理前导入一次,从而可以按照用户喜好实现效果叠加的功能。保存图片按钮是对处理后的图像进行存储,当一幅图像在不同模块进行处理时,在所有处理完成后,点击保存图片按钮存储最终结果即可。
三、颜色恒常模块
在系统读取输入图像之后,点击GUI中左侧的AWB按钮,系统会调用模型,对当前图像进行颜色恒常处理,此时界面上方会出现“正在生成…”的字样,处理完成后,中央的QLabel控件会显示处理后的效果图预览。
四、效果调节模块
效果调节模块可以实现图像的效果增强,从而根据用户需求突出或者弱化图像中某些特征。效果调节模块的主要功能有亮度修正、色温调节、对比度调节、色彩饱和度调节、平滑和锐化。各个指标变化的范围为0%~100%,原输入图像默认各个指标均为50%。
4.4 功能测试
4.4.1 图像文件的读取与保存
图像读取与保存都将调用系统任务管理器的对话框获得,将用户选择的图片文件转换为路径字符串。图4-6、图4-7为图像的选择过程,选择完毕后,图片将会以合适的比例显示在界面中央。

图4-6 点击选择图片按钮指定输入图片路径

图4-7 选择图片之后的系统界面
图像读取成功后,系统内部切换为已有输入的状态,界面上将会出现保存图片按钮,用户点击即可实现当前图像效果的存储。图像的存储过程如图4-8所示,点击保存图片按钮将弹出任务管理器的对话框,在对话框中选择图片要保存的路径,只输入图片名或者加上.jpg或.png的后缀名,点击保存,将进行图片缓存文件的转移操作,系统按照获得的保存路径将图像保存在相应文件夹下。

图4-8 点击保存图片将当前编辑的图像保存到指定路径
4.4.2 颜色恒常

图4-9 点击AWB按钮后对图像进行颜色恒常的处理结果
在图4-7中的界面中继续点击AWB按钮,即可对使用系统内置的模型对图像进行颜色恒常。生成的颜色恒常图像如图4-9所示,中央的图像预览区显示了最新变更的图像。可以看到示例图像由暖光下的色偏效果转换为了标准光源下的效果,图片中的物体颜色与人眼视觉系统的颜色判断一致,达到了高精度的颜色恒常还原。
4.4.2 亮度

图4-10 调节示例图像亮度为0%

图4-11 调节示例图像亮度为100%
亮度指的是图像灰度,是图片明暗程度的指标。亮度越高,图像就越亮,越接近纯白色;亮度越低,图像就越暗,越接近纯黑色。我们可以通过界面下方的亮度滑块对图像整体的亮度进行调节,初始亮度为50%。图4-10中调节示例图像亮度为0%,可以明显看到图像整体颜色趋近于黑色,变得较暗。图4-11调节示例图像亮度为100%,图像多个亮处接近于白色而损失了细节,变得很亮。
4.4.3 色温
色温能表示光线中包含颜色成分,是图片色调冷暖的一种描述,在我们的颜色恒常性系统中,默认图像初始色温为50%。色温调节功能如图4-12、图4-13所示,前者调整色温为0%,图片呈现冷色调,整体颜色偏蓝色,后者调整色温为100%,图片呈现暖色调,整体颜色偏红色。

图4-12 调节示例图像色温为0%

图4-13 调节示例图像色温为100%
4.4.4 对比度
对比度是图像中黑色和白色的比值,反映的是图像的层次感的强弱。比值越低,图像越接近于稳定的灰色,如图4-14,调节对比度为0%。比值越大,图片的颜色的层次对比就会越大,从而使图像的颜色变得更丰富与纯净,如图4-15,调节对比度为100%。

图4-14 调节示例图像对比度为0%

图4-15 调节示例图像对比度为100%
4.4.5 饱和度
饱和度调节可以实现图像的彩色增强,尤其是彩色图像的处理,类似于彩色电视机上的控件,默认图像初始的饱和度为50%。饱和度越低,图像越接近于黑白,如图4-16所示,调节饱和度为0%;饱和度越高,图像颜色越鲜艳,如图4-17所示,调节饱和度为100%。

图4-16 调节示例图像饱和度为0%

图4-17 调节示例图像饱和度为100%
4.4.6 锐度
图片的锐度调整则是为了能够调节图片清晰度,减少锐度为平滑操作,而增加锐度则为锐化操作,默认图像读入时的初始锐度值为50%。平滑可以使图象更加模糊,如图4-18,调节锐度为0%。而锐化则可以突出物体的边界轮廓,使图片看起来更为清晰,界限也更为清楚,如图4-19,调节锐度为100%。

图4-18 调节示例图像锐度为0%

图4-19 调节示例图像锐度为100%
4.4.7 叠加效果
除了以上功能外,我们参考如今流行的图像编辑器,为系统加上了叠加效果的功能。在图像调整的过程中,每一次调整模式的切换,如调整对比度后再调节饱和度,都会更新系统文件夹下的tmp.jpg文件,从而实现叠加效果的功能。将各个模块的调整效果叠加起来,即可实现图像增强或其他图像调整操作,更满足用户对图像编辑的需求。如图4-20所示,调整图片下方的五个滑块到合适的程度,实现了各个功能模块的叠加。

图4-20 示例图像调节后的叠加效果
4.5 系统特征分析
基于Windows平台的颜色恒常性系统具有以下特点:
(1)颜色恒常效果好。通过3.3实验结果可以看出,系统内置的颜色恒常算法模型不仅可以对用户选择的照片进行白平衡校正,而且校正效果较好,符合人眼视觉系统的颜色判断,用户体验流畅。
(2)系统操作简易,界面简洁友好。通过按钮能实现一键颜色恒常操作,图片的效果可以实时展示在系统界面上以便用户参考。处理后的图片及时保存到指定位置,方便用户分享,节省用户时间。
(3)系统灵活性强,可靠性高。简单易用,功能稳定,数据量小,便于移植,运行速度快。同时开发者可以更新模型,修改系统目录中的模型文件并进行简单的代码修改即可。
(4)系统功能丰富。该系统涵盖了数字图像处理主要的几大操作,通过参数叠加,可以自由调整出想要的效果,用户可以根据自己需求,使用系统中图像的颜色恒常或者图像增强的功能。