微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种改进的图像重组算法及其硬件实现

一种改进的图像重组算法及其硬件实现

时间:06-04 来源:互联网 点击:

1.引言

目前,大多数的数字相机的图像传感器,不管是CMOS还是CCD,都是单色的,即只有灰度的变化。为了得到彩色图像,普遍采用的方法是在传感器的表面覆盖一层聚酰亚胺掩膜的彩色滤色器。滤色器的格式有多种,一般为棋盘格式。本文提出的算法针对的是其中最常用的bayer格式,如图1所示,其滤色滤格子分别透过G(绿)、B(蓝)、R(红)三种颜色,其中G的采样率是B、R的两倍,原因是人眼对绿色信息要比蓝色、红色敏感。

图像传感器传来的数据通常对应每个像素点R、G、B三种颜色中的一种颜色信息,图像重组算法(Demosaicing Algorithm)是指把传感器送来的每个像素点信息转化为包含R、G、B三原色信息的图像算法。关于图像重组算法日前主要有独立插值法、按比例插值法、Kimmel法等,本文将在分析这些算法的基础上提出能平衡图像质量和硬件消耗的新算法及实现方法。

2.传统算法

2.1 独立插值算法

最简单的线性方法足R、G、B三分量各自独立进行插值重组,彼此没有关联。以利用相邻像素作平均的插值法为例:

如图2,G2、G4、G6、G8、R1、R3、R7、R9为已知相应像素的相应分量,G5、R2、R4、R6、R8、R5为所求分量,求法如下:

蓝色分量的求法与R相似。

此方法虽然简单,占用硬件资源比较少,但是却会引起色彩混淆和边沿模糊问题,因为其在重组过程中忽略了边沿问题。为了提高图像质量,可以在此基础上加入梯度的控制。因此,该算法采用了梯度小的方向的分量值作均值处理。由于梯度大的方向是边沿变化的方向,若选取了该方向上的值作均值,就会模糊了边沿。以求图2中的G5分量为例:

水平梯度H=|G4-G6|,垂直梯度V=|G2-G8|。

H>V,G5=(G2+G8)/2;H

此外,该算法没有考虑噪声因素,其简单的平均化操作将使一个像素上的噪声扩大到影响九个像素,从而导致信噪比较低。

2.2 按比例插值算法

由于BAYER格式的传感器上G分量比R、B分量要多一倍,于是有人提出利用G分量对R、B分量进行插值。

如图3所示,G1-G9已经插值得到,R1、R3、R7、R9为已知R信息,求R5:

R5={(R1*G5/G1)+(R3*G5/G3)+(R7*G5/G7)+(R9*G5/G9))/4

此算法对消除色彩混淆有一定的作用,但有个致命的缺点,在G分量特别小的区域,两G分量比例(如G5/G1)可能会变得很大;由于R1、R3、R7、R9都只是所要求的R5周围的点,在R5周围很有边沿信息(在图像中,边沿信息与噪声无异)时,如果G5/G1等比例值太大,很可能引入一个非常大的噪声,使得图像失真严重,造成计算R、B分量时对噪声特别敏感,使得图像信噪比降低。

2.3 Kimmel算法

Kimmel算法是图像重组算法中一个常用的经典方法。如图4,Kimmel算法求G5:



其中,E为权重参数,表征该相邻像素参与运算的比例。E由该相邻像素的梯度D决定,梯度D越大,权重E越小。梯度D的定义如下:(其中P代表R,G,B任意一个分量)

从而:Ei=(1+D2(P5)+D2(Pi))1/2,如E3=(1+Dxd2(PS)+Dxd2(P3))1/2。

kimmel算法在求解R、B分量时也同样采用了按比例插值的思想,只是比例权重不同,这样可以较大程度地减弱色彩混淆现象。如图4,用kimmel算法求R5:

Kimmel算法重组得到的图像质量比线性插值的方法提高了很多,但kimmel算法也有其缺点,这是本文提出改进算法的出发点,将在下面讨论。

3.改进的算法

本文在kimmel算法的基础上进行了如下的改进:

(1) 待重组图像像素与周边像素的关联性进一步增强,从而改善图像的边沿特性。

在kimmel算法中梯度简单地以两个像素的某个分量差绝对值表示,本文提出的方法是用一个相应方向上更大范围窗口的像素点的差的平均值来代替原来梯度。

例如,在kimmel算法中,如图1,D=|G[5,5]□G[6,6]|,用本文的方法则为:

这样可进一步加强所求像素点与周边像素已知分量的关联性,从而减弱混淆现象。

(2) 修正kimmel算法在G分量缺少时的缺陷。

在kimmel算法中,在G很小的区域,两像素的G比例就会变得很大,这样会造成图像失真和放大噪声。为此,本文在利用G计算R、B时,可给G设一阈值;此值越大,图像质量越差;此值越小,在G较小区域的图像失真就越严重;因此,此值的设定要经过反复的仿真试验,找到合适的平衡点,本文经过实验对比各参数下的效果,将此值选择为40~60。

(3) 改变kimmel算法所有像素都重新计算其三分量值的做法。

kimmel的算法会改变每个像素三个分量的值,本算法保留原来该像素的已知值,从而可以保留原始图像更多的信息,提高了图像质量。由于本算法要在ASIC上实现,在不影响图像总体质量的前提下,应尽量简化某些运算,节省硬件资源。

①本文在求E时不用开方倒数的方式,而采用查表

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

网站地图

Top