图像Demosaic算法实验报告材料Word下载.docx
《图像Demosaic算法实验报告材料Word下载.docx》由会员分享,可在线阅读,更多相关《图像Demosaic算法实验报告材料Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
绿色分量,利用双线性法可以得到:
由于双线性法是单通道之间独立插值,并且始终取3×
3滤波器的平均值,忽
略了细节信息,以及图片三个颜色通道之间的相关性,所以双线性法往往不能得
到满意的插值效果,容易在细线状态结构的边缘处产生锯齿形图案。
(2)自适应插值法
在Bayer格式中,绿色像素占了总像素的一半,也反映了更多的细节,因此,
插值都会优先考虑对绿色通道的恢复,而红色和蓝色的比例较少,细节信息少,
需要估算的信息多,失真会明显,为改进算法的性能,多会从改善红色与蓝色通
道着手。
为合理解决边界的插值问题,研究人员提出了基于梯度的插值算法。
为保证
插值是沿着边界进行,而没有跨越边界,在恢复绿色分量时,先通过计算梯度来
检测边界方向,从而选择合适的插值方向。
例如,为恢复出采样点的绿色分量,
先计算出该点水平和竖直方向的梯度算子。
参考图3-1,以B44为例,假设α为该采样点水平方向的梯度,β为竖直方向的梯度,
Laroche则通过计算二阶微分即色度分量来确定边界方向,其中:
如果α<
β,则认为水平方向存在边界的概率比较大,插值会沿着最可能的边
界进行,即在水平方向进行,而水平方向的邻域像素与被插值点的像素的相关性
也会大于竖直方向的像素。
插值结果如下式所示:
如果α>
β,则认为在竖直方向存在边界的概率大,插值在竖直方向进行,插
值结果为:
如果两者相比较相等的话,则认为该像素点处在一个平滑区域内,插值在整
个邻域内进行,认为:
一旦亮度被确定,则色度分量通常是由亮度信号和色度信号的相关性来进行
插值。
第二步:
在对红色和蓝色通道插值时,用到的基本思想是基于色差的插值算
法。
色差思想与色比恒定的思想是一致的,它认为在图片的小平滑区域内,色差
是恒定的。
假设(i,j)邻近的一个采样点是(m,n),则有:
上面的等式成立即是利用了色差恒定的原则。
假设我们需要恢复红色通道信息,根据阵列的排列规律,有三种不同的情况,
分别如下:
(1)假设要恢复G34处的红色分量:
(2)假设要恢复G43处的红色分量:
(3)假设要恢复B44处的红色分量:
蓝色通道处理往往是与红色通道一致,必须注意的是在色度值确立之时,已
经获得了整个图片的亮度信号。
经过这两个步骤的处理,可以获得Bayer图片的重构图像。
以上所述,即是自适应插值法的过程。
3、实验结果
原图
Bayer阵列
非自适应插值(双线性)
自适应插值法
4、总结
通过三类图像的比较,可以看出真彩色图像的三个颜色通道之间有很强的相
关性,插值最好结合其相关性,而不能依赖于单通道独立插值;
其次,由于图片
的失真往往出现在高频区域,必须考虑基于边界的插值方案,对图像的区域细节
特征进行分析,使得插值尽可能沿着边界方向,或是使得边界方向插值核的加权
系数尽可能大。
附录:
Matlab代码
%双线性插值
clear;
clc;
I=imread('
9.jpg'
);
figure
imshow(I);
[h,w,c]=size(I);
[m,n]=size(I);
m=h,
n=w;
fori=1:
2:
h
forj=1:
w
ifmod(j,2)==1
IMG(i,j,1)=I(i,j,1);
else
IMG(i,j,2)=I(i,j,2);
end
end
fori=2:
IMG(i,j,3)=I(i,j,3);
imshow(IMG);
%IMG11=rgb2gray(IMG);
%save('
Bayer.png'
'
IMG11'
)
IMG=double(IMG);
m-1
forj=2:
n-1
x11=IMG(i-1,j-1,1);
x12=IMG(i-1,j+1,1);
x21=IMG(i+1,j-1,1);
x22=IMG(i+1,j+1,1);
IMG(i,j,1)=uint8((x11+x21+x12+x22)/4);
ifIMG(i,j,1)==0
IMG(i,j,1)=0.25*(IMG(i,j+1,1)+IMG(i,j-1,1)+IMG(i+1,j,1)+IMG(i-1,j,1));
IMG(i,j,1)=IMG(i,j,1);
IMG(i,j,2)=0.25*(IMG(i,j+1,2)+IMG(i,j-1,2)+IMG(i+1,j,2)+IMG(i-1,j,2));
ifIMG(i,j,2)==0
x11=IMG(i-1,j-1,2);
x12=IMG(i-1,j+1,2);
x21=IMG(i+1,j-1,2);
x22=IMG(i+1,j+1,2);
IMG(i,j,2)=uint8(0.25*(x11+x21+x12+x22));
IMG(i,j,2)=IMG(i,j,2);
fori=3:
forj=3:
x11=IMG(i-1,j-1,3);
x12=IMG(i-1,j+1,3);
x21=IMG(i+1,j-1,3);
x22=IMG(i+1,j+1,3);
IMG(i,j,3)=uint8(0.25*(x11+x21+x12+x22));
ifIMG(i,j,3)==0
IMG(i,j,3)=0.25*(IMG(i,j+1,3)+IMG(i,j-1,3)+IMG(i+1,j,3)+IMG(i-1,j,3));
IMG(i,j,3)=IMG(i,j,3);
imshow(uint8(IMG));
%梯度
DD.jpg'
m=h;
R=zeros(m,n);
G=zeros(m,n);
B=zeros(m,n);
R1=zeros(m+4,n+4);
G1=zeros(m+4,n+4);
B1=zeros(m+4,n+4);
R=IMG(:
:
1);
G=IMG(:
2);
B=IMG(:
3);
R1(3:
m+2,3:
n+2)=R;
m+2,1)=R(:
m+2,2)=R(:
m+2,n+3)=R(:
n);
m+2,n+4)=R(:
n-1);
R1(1,:
)=R1(4,:
R1(2,:
)=R1(3,:
R1(m+3,:
)=R1(m+2,:
R1(m+4,:
)=R1(m+1,:
G1(3:
n+2)=G;
m+2,1)=G(:
m+2,2)=G(:
m+2,n+3)=G(:
m+2,n+4)=G(:
G1(1,:
)=G1(4,:
G1(2,:
)=G1(3,:
G1(m+3,:
)=G1(m+2,:
G1(m+4,:
)=G1(m+1,:
B1(3:
n+2)=B;
m+2,1)=B(:
m+2,2)=B(:
m+2,n+3)=B(:
m+2,n+4)=B(:
B1(1,:
)=B1(4,:
B1(2,:
)=B1(3,:
B1(m+3,:
)=B1(m+2,:
B1(m+4,:
)=B1(m+1,:
X=cat(3,R1,G1,B1);
figure,imshow(uint8(X))
fori=4:
m
forj=4:
n
a=abs(2*B1(i,j)-B1(i,j-2)-B1(i,j+2));
b=abs(2*B1(i,j)-B1(i-2,j)-B1(i+2,j));
ifa<
b
G1(i,j)=(G1(i,j-1)+G1(i,j+1))/2;
elseifa>
G1(i,j)=(G1(i-1,j)+G1(i+1,j))/2;
G1(i,j)=(G1(i-1,j)+G1(i,j-1)+G1(i,j+1)+G1(i+1,j))/4;
a=abs(G1(i,j-1)-G1(i,j+1));
b=abs(G1(i-1,j)-G1(i+1,j));
elseifa>
G1(i,j)=(G1(i,j-1)+G1(i,j+1)+G1(i-1,j)+G1(i+1,j))/4;
a=abs(2*(G1(i,j)-G1(i-1,j+1)-G1(i+1,j-1)))+abs(G1(i-1,j+1)-G1(i+1,j-1));
b=abs(2*(G1(i,j)-G1(i-1,j-1)-G1(i+1,j+1)))+abs(G1(i-1,j-1)-G1(i+1,j+1));
R1(i,j)=(R1(i-1,j+1)+R1(i+1,j-1))/2+(2*G1(i,j)-G1(i-1,j+1)-G1(i+1,j-1))/2;
R1(i,j)=(R1(i-1,j-1)+R1(i+1,j+1))/2+(2*(G1(i,j)-G1(i-1,j-1)-G1(i+1,j+1)))/2;
R1(i,j)=(R1(i-1,j-1)+R1(i-1,j+1)+R1(i+1,j-1)+R1(i+1,j+1))/4+(4*G1(i,j)-G1(i-1,j-1)-G1(i-1,j+1)-G1(i+1,j-1)-G1(i+1,j+1))/4;
m-1;
n;
R1(i,j)=(R1(i,j-1)+R1(i,j+1))/2-(G1(i,j-1)+G1(i,j+1))/2+G1(i,j);
m;
n-1;
R1(i,j)=(R1(i-1,j)+R1(i+1,j))/2-(G1(i-1,j)+G1(i+1,j))/2+G1(i,j);
%恢复蓝色分量
a=abs(2*(G1(i,j)-G1(i-1,j+1)-G1(i+1,j-1)))+abs(G1(i-1,j+1)-G1(i+1,j-1));
B1(i,j)=(B1(i-1,j+1)+B1(i+1,j-1))/2+(2*G1(i,j)-G1(i-1,j+1)-G1(i+1,j-1))/2;
B1(i,j)=(B1(i-1,j-1)+B1(i+1,j+1))/2+(2*(G1(i,j)-G1(i-1,j-1)-G1(i+1,j+1)))/2;
B1(i,j)=(B1(i-1,j-1)+B1(i-1,j+1)+B1(i+1,j-1)+B1(i+1,j+1))/4+(4*G1(i,j)-G1(i-1,j-1)-G1(i-1,j+1)-G1(i+1,j-1)-G1(i+1,j+1))/4;
B1(i,j)=(B1(i,j-1)+B1(i,j+1))/2-(G1(i,j-1)+G1(i,j+1))/2+G1(i,j);
B1(i,j)=(B1(i-1,j)+B1(i+1,j))/2-(G1(i-1,j)+G1(i+1,j))/2+G1(i,j);
X=uint8(X);
imshow(X);