基于梯度的边缘导向插值算法.docx
《基于梯度的边缘导向插值算法.docx》由会员分享,可在线阅读,更多相关《基于梯度的边缘导向插值算法.docx(14页珍藏版)》请在冰豆网上搜索。
基于梯度的边缘导向插值算法
基于梯度的边缘导向插值算法
引言
目前的图像采集设备多采用一个图像传感器及颜色滤波阵列来来采集彩色图像,得到的图像每个像素点仅有一种颜色,需要对缺少的其他两种颜色进行插值本文详细介绍了基于Bayer格式颜色滤波阵列的数字图像传感器的基于梯度的边缘导向颜色插值算法。
近年来,数字成像装置已经越来越广泛的应用于各种消费类电子产品中,如数
码相机、手机及视频监控系统等。
目前的数字成像装置主要采用两种感光元件,
一种是CCDS光元件,另一种是CMO感光元件,然而这两种图像传感器在一个像素上只能采集RGB颜色的一个分量。
为了获得最佳的图像效果,需要用3个图像传感器分别采集不同的颜色分量。
但考虑到产品的成本及设计复杂度,通常的数字成像设备用一个传感器在表面覆盖颜色滤波阵列来采集图像,经光学镜头采集
到的图像通过一个颜色滤波阵列滤波后在图像传感器上感光,得到的图像数据每
个像素点表示RGB中的一种颜色,对该数据进行颜色插值可获得待采集的彩色图像。
目前存在多种类型的颜色滤波阵列,其中Bayer型颜色滤波阵列有很好的彩色信号敏感特性和彩色恢复特性,被广泛的应用在各种图像传感器上。
二、BayerCFA
Bayer彩色滤波阵列是交替使用一组绿色和红色滤镜以及一组绿色和蓝色
滤镜来处理入射光,绿颜色的光谱范围更接近人视觉系统的光谱响应波段,人眼
对绿色更为敏感,能分辨更多的细节,有助于恢复后的彩色图像拥有最大的清晰度。
Bayer彩色滤波阵列中红色和蓝色像素个数均占总像素个数的1/4,而绿色像
素个数则占总像素个数的1/2。
Bayer滤波阵列格式如图下所示:
R
G
R
G
R
G
G
B
G
B
G
B
R
G
R
G
R
G
G
B
G
B
G
B
R
G
R
G
R
G
G
B
G
B
G
B
经光学镜头采集到的图像通过Bayer彩色滤波阵列滤波后在图像传感器上感光,得到的图像数据每个像素点表示RG、B中的一种颜色,这时需要对该数据进行颜色插值可获得待采集的彩色图像。
三、BayerCFA型插值算法研究
颜色插值是图像后处理中的关键技术,插值算法的选取直接影响着图像最后的效果。
对不同的应用领域,需要综合考虑插值算法的算法复杂度及恢复效果,选取合适的算法。
常用的BayerCFA彩色复原算法主要分为两类:
单个颜色通道独立插值算法和利用多通道的相关性进行交互式插值。
其中单个颜色通道独立插值算法有:
邻域算法、相关线性插值算法、立方卷积插值算法、B样条插值算法等
多通道相关性插值算法有:
基于边界的插值算法、加权系数插值算法、交互式插值算法、最优化恢复算法、小波变换、基于色比恒定的COK常色调插值法、
基于梯度的边缘导向插值法、基于加权的RomKimme法则、中值滤波算法、基于色差的LU算法等
本文只具体介绍基于梯度的边缘导向差值算法。
四、基于梯度的边缘导向差值算法M
基于梯度的边缘导向插值算法可以克服双线性插值算法带来的边缘模糊的问题。
人的视觉系统对色彩的变化和边界信息非常敏感,高效的插值算法都会沿着边界方向进行插值。
该算法就保证了插值是沿边界方向进行的。
首先比较水平方向上和垂直方向上梯度的大小,插值时取梯度值小的方向上的像素点作为估计点计算当前像素未知色彩的值,这样避免了跨边缘颜色插值导致的边缘模糊的情况。
由于人眼对绿色较为敏感,为了尽量减少算法复杂度,该算法主要对G分量使用了边缘导向的算法,而R、B分量则用双线性插值法计算并由G分量修正得到。
算法首先对G分量进行插值,考虑图1中像素点(3,3),根据该点周围的红色分量的值来决定该点的水平和垂直方向上的梯度值,Laroche通过计算色度分量的二阶微分来确定边界方向。
令H33=心31-也表示该点处水平梯度
2
表示该点处垂直梯度值,对G(3,3)进行估计有:
g23+g43H、V
-,H33AV33
2
G3,3二
g32+g34HV
H33VV33
2
g23*g32+g34*g43HV
H33~V33
4
其他的G分量为0的像素点的插值与上类似。
G分量插值完以后,再计算R分量及B分量的值。
对于像素点(3,3)及像素点(3,4),根据相邻像素点来估计R、B的值,并用G分量修正:
B(33)b22+b24+b42+b44+g(33)_G(2,2)*G(2,4)+G(4,2)+G(4,4)'4'
R(34)也+「35G(3,3)+G(3,5)
R(3,4)g34-
22
%+b44G(2,4)+G(4,4)
B(3,4)g34
2
用同样的方法可以得到所有点的RB分量的值。
五、实验过程
1、读入一幅彩色图片,按照Bayer滤波阵列格式将R、GB分量相对应的值赋为零,即可得到Bayer图像。
2、按照算法对G分量进行插值计算;G分量插值计算完毕后,根据相邻像素点估算RB分量值,并用G分量修正。
这样即可得到一幅完整图像的所有分量的所有像素点的值。
3、将处理完成的图像显示,并与原图、Bayer图像进行比较。
六、实验结果展示
:
.;:
ii
:
-:
Bayer®像
10一口可m:
1
原图
n:
ir
:
ji:
i:
弐-'
T;nr:
-
Bayer图像
处理完成的图像
与双线性插值、适应层颜色插值算法比较:
基于梯度的边缘导向插值算法处理结果
适应性颜色层插值算法
双线性算法处理结果
七、参考文献
【1】贺钦,刘文予•数字图像传感器颜色插值算法研究•小型微型计算机系统,
2007,8,1482~1485
八、附录
1、生成Bayer图像的matlab程序
%将一幅正常JPG格式图像转换成Bayer图像,并显示出来。
clear
clc
X=imread('linda.jpg');
R=X(:
:
1);
G=X(:
:
2);
B=X(:
:
3);
[row,col]=size(R);
R仁im2uint8(zeros(row,col));%将double型转化成unit8型
G1=R1;
B1=R1;
fori=1:
row
forj=1:
col
ifmod(i,2)==1&mod(j,2)==1
R1(i,j)=R(i,j);
elseifmod(i,2)==1&mod(j,2)==0
G1(i,j)=G(i,j);
elseifmod(i,2)==0&mod(j,2)==1
G1(i,j)=G(i,j);
else
B1(i,j)=B(i,j);
end
end
end
Y(:
:
1)=R1;
Y(:
:
2)=G1;
Y(:
:
3)=B1;
Z=R1+B1+G1;
figure
imshow(Z)
imwrite(Y,'bayer.png')
title('Bayer图像')
2、基于梯度的边缘导向插值算法程序
%使用基于梯度的边缘导向插值算法对Bayer图像进行插值,并显示结果和原图
clear
clc
X1=imread('bayer.png');
[row,col,pag]=size(X1);
X=imread('linda.jpg');
X1=double(X1);
fori=3:
row-2%对G分量进行插值
forj=3:
col-2
ifmod(i,2)==1&mod(j,2)==1
H=abs((X1(i,j+2,1)+X1(i,j-2,1))/2-X1(i,j,1));
V=abs((X1(i+2,j,1)+X1(i-2,j,1))/2-X1(i,j,1));
ifH>V
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2))/2;
elseifHX1(i,j,2)=(X1(i,j-1,2)+X1(i,j+1,2))/2;
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2)+X1(i,j-1,2)+X1(i,j+1,2))/4;
end
elseifmod(i,2)==0&mod(j,2)==0
H=abs((X1(i,j+2,3)+X1(i,j-2,3))/2-X1(i,j,3));
V=abs((X1(i+2,j,3)+X1(i-2,j,3))/2-X1(i,j,3));
ifH>V
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2))/2;
elseifHX1(i,j,2)=(X1(i,j-1,2)+X1(i,j+1,2))/2;
else
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2)+X1(i,j-1,2)+X1(i,j+1,2))/4;
end
end
end
end
fori=4:
row-3%计算R和B分量
forj=3:
col-3
ifmod(i,2)==1&mod(j,2)==0
X1(i,j,1)=(X1(i,j-1,1)+X1(i,j+1,1))/2+X1(i,j,2)-(X1(i,j-1,2)+X1(i,j+1,2))/2;
X1(i,j,3)=(X1(i-1,j,3)+X1(i+1,j,3))/2+X1(i,j,2)-(X1(i-1,j,2)+X1(i+1,j,2))/2;
elseifmod(i,2)==0&mod(j,2)==1
X1(i,j,3)=(X1(i,j-1,3)+X1(i,j+1,3))/2+X1(i,j,2)-(X1(i,j-1,2)+X1(i,j+1,2))/2;
X1(i,j,1)=(X1(i-1,j,1)+X1(i+1,j,1))/2+X1(i,j,2)-(X1(i-1,j,2)+X1(i
+1,j,2))/2;
elseifmod(i,2)==0&mod(j,2)==0
X1(i,j,1)=(X1(i-1,j-1,1)+X1(i-1,j+1,1)+X1(i+1,j-1,1)+X1(i+1,j+1,1))/4+X1(i,j,2)-(X1(i-1,j-1,2)+X1(i-1,j+1,2)+X1(i+1,j-1,2)+X1(i+1,j+1,2))/4;
X1(i,j,3)=(X1(i-1,j-1,3)+X1(i-1,j+1,3)+X1(i+1,j-1,3)+X1(i+1,j+1,3))/4+X1(i,j,2)-(X1(i-1,j-1,2)+X1(i-1,j+1,2)+X1(i+1,j-1,2)+X1(i+1,j+1,2))/4;
end
end
end
figure
imshow(X)
title('原图')
X1=uint8(X1);
figure
imshow(X1)
imwrite(X1,'tidu.png')
title('基于梯度的边缘导向插值算法处理结果’)
3、适应性颜色层插值算法程序
%使用适应层颜色插值算法处理图像并显示结果
clear
clc
X1=imread('bayer.png');
[row,col,pag]=size(X1);
X仁double(X1);
k=0;
fori=3:
row-2%对G分量进行插值
forj=3:
col-2
ifmod(i,2)==1&mod(j,2)==1
k=1;
H=abs(X1(i,j-1,2)-X1(i,j+1,2))+abs(2*X1(i,j,k)-X1(i,j-2,k)-X1(i,j+2,k));
V=abs(X1(i+1,j,2)+X1(i-1,j,2))+abs(2*X1(i,j,k)-X1(i-2,j,k)-X1(i+2,j,k));
ifH>V
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2))/2+(2*X1(i,j,k)-X1(i-2,j,1)-X1(i+2,j,k))/4;
X1(i,j,2)=(X1(i,j-1,2)+X1(i,j+1,2))/2+(2*X1(i,j,k)-X1(i,j-2,k)-X1
(i,j+2,k))/4;
else
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2)+X1(i,j-1,2)+X1(i,j+1,2))/4+(4*
X1(i,j,k)-X1(i-2,j,k)-X1(i+2,j,k)-X1(i,j-2,k)-X1(i,j+2,k))/8;
end
elseifmod(i,2)==0&mod(j,2)==0k=3;
H=abs(X1(i,j-1,2)-X1(i,j+1,2))+abs(2*X1(i,j,k)-X1(i,j-2,k)-X1(i,j+2,k));
V=abs(X1(i+1,j,2)+X1(i-1,j,2))+abs(2*X1(i,j,k)-X1(i-2,j,k)-X1(i+2,j,k));
ifH>V
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2))/2+(2*X1(i,j,k)-X1(i-2,j,1)-X1(i+2,j,k))/4;
elseifHX1(i,j,2)=(X1(i,j-1,2)+X1(i,j+1,2))/2+(2*X1(i,j,k)-X1(i,j-2,k)-X1(i,j+2,k))/4;
else
X1(i,j,2)=(X1(i-1,j,2)+X1(i+1,j,2)+X1(i,j-1,2)+X1(i,j+1,2))/4+(4*X1(i,j,k)-X1(i-2,j,k)-X1(i+2,j,k)-X1(i,j-2,k)-X1(i,j+2,k))/8;
end
end
end
end
fori=4:
row-3%计算R和B分量
forj=4:
col-3
ifmod(i,2)==1&mod(j,2)==0
X1(i,j,1)=(X1(i,j-1,1)+X1(i,j+1,1))/2+X1(i,j,2)-(X1(i,j-1,2)+X1(i,j+1,2))/2;
X1(i,j,3)=(X1(i-1,j,3)+X1(i+1,j,3))/2+X1(i,j,2)-(X1(i-1,j,2)+X1(i+1,j,2))/2;
elseifmod(i,2)==0&mod(j,2)==1
X1(i,j,3)=(X1(i,j-1,3)+X1(i,j+1,3))/2+X1(i,j,2)-(X1(i,j-1,2)+X1(i,j+1,2))/2;
X1(i,j,1)=(X1(i-1,j,1)+X1(i+1,j,1))/2+X1(i,j,2)-(X1(i-1,j,2)+X1(i
+1,j,2))/2;
elseifmod(i,2)==1&mod(j,2)==1
k=3;
H=abs(X1(i-1,j-1,k)-X1(i+1,j+1,k))+abs(2*X1(i,j,2)-X1(i-1,j-1,2)-
X1(i+1,j+1,2));
V=abs(X1(i-1,j+1,k)-X1(i+1,j-1,k))+abs(2*X1(i,j,2)-X1(i-1,j+1,k)-X1(i+1,j-1,k));
ifHX1(i,j,k)=
(X1(i-1,j-1,k)+X1(i+1,j+1,k))/2+(2*X1(i,j,2)-X1(i-1,j-1,2)-X1(i+1,j+1,2))/2;
elseifH>V
X1(i,j,k)=(X1(i-1,j+1,k)+X1(i+1,j-1,k))/2+(2*X1(i,j,2)-X1(i-1,j+1,k)-X1(i+1,j-1,k))/2;
else
X1(i,j,k)=(X1(i-1,j-1,k)+X1(i-1,j+1,k)+X1(i+1,j-1,k)+X1(i+1,j+1,k))/4+X1(i,j,2)-(X1(i-1,j-1,2)+X1(i-1,j+1,2)+X1(i+1,j-1,2)+X1(i+1,j+1,2))/4;
end
else
k=1;
H=abs(X1(i-1,j-1,k)-X1(i+1,j+1,k))+abs(2*X1(i,j,2)-X1(i-1,j-1,2)-X1(i+1,j+1,2));
V=abs(X1(i-1,j+1,k)-X1(i+1,j-1,k))+abs(2*X1(i,j,2)-X1(i-1,j+1,k)-X1(i+1,j-1,k));
ifHX1(i,j,k)=
(X1(i-1,j-1,k)+X1(i+1,j+1,k))/2+(2*X1(i,j,2)-X1(i-1,j-1,2)-X1(i+1
j+1,2))/2;
elseifH>V
X1(i,j,k)=(X1(i-1,j+1,k)+X1(i+1,j-1,k))/2+(2*X1(i,j,2)-X1(i-1,j+1,k)-X1(i+1,j-1,k))/2;
else
X1(i,j,k)=(X1(i-1,j-1,k)+X1(i-1,j+1,k)+X1(i+1,j-1,k)+X1(i+1,j+1,k))/4+X1(i,j,2)-(X1(i-1,j-1,2)+X1(i-1,j+1,2)+X1(i+1,j-1,2)+X1(i+1,j+1,2))/4;
end
end
end
end
X1=uint8(X1);
figure
imshow(X1)
imwrite(X1,'zishiying.png')
title('适应层颜色插值算法处理结果')