微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用Zynq-7000 All Programmable SoC实现图像传感器色彩校正

使用Zynq-7000 All Programmable SoC实现图像传感器色彩校正

时间:03-20 来源:电子产品世界 点击:

生伪影。例如使用带原生色调的高亮光源照明,在图像中产生的饱和像素。典型如火焰位于焦点上的烛光照片,此时会导致完全饱和,图像上出现白色像素。

其它改善白平衡结果的方法

还有一种色彩校正方法就是将前景和背景分离。数码相机采用的自动对焦与矩阵测光相结合的方法,可以把镜头中心焦点周边的像素与靠近边缘的背景像素在空间上区分开来。这种方法假定拍摄的物体只有几种主要颜色,而且位于图像中心的焦点上。远处的物体靠近边缘,由灰度世界假设主导。

另一种方法围绕形状检测。面部或皮肤颜色检测有助于相机识别有预期色调的图像内容。这样只需要对有已知和预期的色调的像素进行白平衡校正。颜色校正就是将这些像素的颜色调整为贴近预期颜色。这种方法的不足之处就是分割和识别逻辑的成本不菲。大多数商业应用采用适应图像内容和拍摄环境的策略,综合应用多种方法[2] 。  

 

用于相机校准和色彩校正的ISP

我们的实现方案采用如图3所示的典型图像传感器流水线技术。我们采用赛灵思基于可配置逻辑的图像处理内核来构建ISP的硬件部分(见蓝色方框)。同时,我们将相机校准和白平衡算法设计为运行在其中一个嵌入式ARM处理器上的C代码(见粉红色方框)。该ARM处理器还运行嵌入式Linux,为主机PC提供用户界面。

ISP中与白平衡和相机校准有关的部分是一个反馈环路,包括:

● 图像统计模块,用于逐帧采集各域的统计数据;
  ● 嵌入式驱动程序和应用软件,用于逐帧分析统计信息并对色彩校正模块编程;
  ● 色彩校正模块,用于逐像素地执行色彩转换。

我们将该ISP实现为Zynq视频和成像套件(ZVIK)1080x60相机图像处理参考设计的组成部分。

算法详解

为校准传感器的颜色,我们使用现成的颜色观察箱(X-Rite Macbeth Judge II)或灯箱。该设备有四个已知光谱的标准光源,分别用于模拟日光、冷白荧光灯、暖光荧光灯和白炽灯。我们还使用现成的色靶(X-Rite ColorChecker 24 色标准色卡),其色标具有已知的反射特性以及RGB与sRGB预期值。

在开始实现相机校准算法之前,我们首先将色靶放置在灯箱中,与灯箱的灰黑色背景平行。我们将色靶调整到一定位置,让来自所有光源的光照尽量均匀。

接下来,在打开所有光源的情况下,我们采集由传感器拍摄的有待校准的图像,此时尚未进行色彩校正(使用“跳过”色彩校正设置:将单位矩阵加载至色彩校正矩阵)。

然后使用赛灵思提供的MATLAB脚本协助补偿镜筒(几何形状)透镜畸变和镜头阴影(光强度在角落处下降)带来的影响。我们使用MATLAB脚本找出图像上的控制点,然后弯曲图像,用以对筒形畸变进行补偿。脚本的其余部分用于根据寄存的ColorChecker色靶背景来估算水平和垂直方向的光强度下降。

为衰减测量到的噪声,我们在色标中划出矩形区域。在这些区域中,我们计算出R、G、B像素数据均值,用RGB三元色表达每个色靶。带GUI的MATLAB脚本可帮助找出色标的中心,然后计算出与每个色标的RGB预期值(Re、Ge、Be)对应的平均RGB三元色。

我们采用模拟退火优化法找出色彩校正系数和偏移量。然后使用图3的色彩校正模块,将未经校正的(R、G、B)三元色转换为校正的(R’、G’、B’)三元色。
       
  模拟退火算法的作用是求出一个能够返回标量的误差函数的最小值。在下面的讨论中,用Rk、Gk、Bk表示测得的色标像素值的子集或超集。用户可以自行限制包含在优化(子集)中的色标数量,也可多次使用某个特定的色标,以增大其在优化过程中的相对权重。整数n代表选优化的色标数量。如果一次优化全部色标,则对X-Rite ColorChecker 24 色标准色卡而言,n则为24。

因为优化算法最多只能设置12个变量(CCM系数和偏移量),一般来说不存在有能够将所有测量值精确映射到预期色标值的解决方案。不过该算法的目的是求出误差函数的最小值,从而在所使用的所有色标上实现理想的误差分布。

我们设置的误差函数用于计算下列参数之一:

● RGB色域中预期三元色和转换后三元色之间的方差和: 
       
  ● RGB色域中预期三元色和转换后三元色之间的绝对差和: 
       
  ● YUV色域中预期三元色和转换后三元色之间的方差和: 
       
  ● YUV色域中预期三元色和转换后三元色之间的绝对差和: 
       
  其中U’和V’对应的是R’G’B’值转换到YUV色域的值。与此类似,误差函数也可设置用于L*u*v*或是 L*a*b*色域。用户可将任何上述误差函数用于仿真退火求最小值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top