去马赛克(Demosaic)二

边缘自适应插值

参考博文图像处理之边缘自适应的插值算法。首先提出从水平和垂直两个方向对绿色分量进行插值重建,先设计由亮度信号的梯度和色度信号的二阶微分构成的边缘检测算子,由边缘检测算子指示沿正确的方向进行绿色分量的插值。红色和蓝色分量的重建使用已经重建好的绿色分量,采用红绿色差空间或蓝色色差空间的线性插值来完成。

在这里插入图片描述

绿色分量重建

\quad\quad 首先恢复红色和蓝色采样点处的绿色分量,以R33为例,水平方向和垂直方向检测算子计算:

h = A B S ( G 32 − G 34 ) + A B S ( 2 R 33 − R 31 − R 35 ) h = ABS(G32-G34)+ABS(2R33-R31-R35) h=ABS(G32G34)+ABS(2R33R31R35)
v = A B S ( G 23 − G 43 ) + A B S ( 2 R 33 − R 13 − R 53 ) v = ABS(G23-G43)+ABS(2R33-R13-R53) v=ABS(G23G43)+ABS(2R33R13R53)

\quad\quad 当水平算子小于垂直算子时,R33存在水平边缘的概率较大,(3,3)处绿色分量的计算沿水平方向进行:
G 33 = G 32 + G 34 2 + 2 R 33 − R 31 − R 35 4 G33 = \frac{G32+G34}{2}+\frac{2R33-R31-R35}{4} G33=2G32+G34+42R33R31R35
\quad\quad 当水平算子大于垂直算子时,R33存在垂直边缘的概率较大,(3,3)处绿色分量的计算沿垂直方向进行,公式如下 :
G 33 = G 23 − G 43 2 + 2 R 33 − R 13 − R 53 4 G33 = \frac{G23-G43}{2}+\frac{2R33-R13-R53}{4} G33=2G23G43+42R33R13R53
\quad\quad 倘若水平和垂直的算子相等,则(3,3)处的绿色分量的计算为水平和垂直方向的平均值,公式如下:
G 33 = G 23 + G 32 + G 34 + G 43 4 + 4 R 33 − R 13 − R 31 − R 35 − R 55 4 G33=\frac{G23+G32+G34+G43}{4}+\frac{4R33-R13-R31-R35-R55}{4} G33=4G23+G32+G34+G43+44R33R13R31R35R55

绿色采样点处的红色和蓝色分量重建

以G43为例,(4,3)处的RB通道:
R 43 = R 33 + R 53 2 + 2 G 43 − G 23 − G 63 2 R43 = \frac{R33+R53}{2}+\frac{2G43-G23-G63}{2} R43=2R33+R53+22G43G23G63
B 43 = B 42 + B 44 2 + 2 G 43 − G 41 − G 45 2 B43 = \frac{B42+B44}{2}+\frac{2G43-G41-G45}{2} B43=2B42+B44+22G43G41G45

红色(蓝色)采样点处的蓝色(红色)分量的重建

以R33为例,(3,3)处的蓝色通道:
D 45 = A B S ( B 24 − B 42 ) + A B S ( 2 G 33 − G 24 − G 42 ) D_{45} = ABS(B24-B42)+ABS(2G33-G24-G42) D45=ABS(B24B42)+ABS(2G33G24G42)
D 135 = A B S ( B 22 − B 44 ) + A B S ( 2 G 33 − G 22 − G 44 ) D_{135} = ABS(B22-B44)+ABS(2G33-G22-G44) D135=ABS(B22B44)+ABS(2G33G22G44)
根据梯度的比较结果,选择合适的插值防线,计算如下:

B 33 = { B 24 + B 42 2 + 2 G 33 − G 24 − G 42 2 , 当 D 45 < D 135 B 22 + B 44 2 + 2 G 33 − G 22 − G 44 2 , 当 D 45 > D 135 B 24 + B 42 + B 22 + B 44 4 + 4 G 33 − G 24 − G 42 − G 22 − G 44 4 , 当 D 45 = = D 135 } B33 = \left\{\begin{align*} &\frac{B24+B42}{2}+\frac{2G33-G24-G42}{2},当D_{45}<D_{135}\\ &\frac{B22+B44}{2}+\frac{2G33-G22-G44}{2},当D_{45}>D_{135}\\ &\frac{B24+B42+B22+B44}{4}+\frac{4G33-G24-G42-G22-G44}{4},当D_{45}==D_{135} \end{align*} \right\} B33= 2B24+B42+22G33G24G42,D45<D1352B22+B44+22G33G22G44,D45>D1354B24+B42+B22+B44+44G33G24G42G22G44,D45==D135

function Output = Debayer_Adaptiveinter(bayer,pattern)

[H,W]     = size(bayer);
Output    = zeros(H,W,3);

%% 插值G通道
g1        = [-1 1];
g2        = [-1 0 2 0 -1];

G1        = conv2(bayer,g1,'same');
G2        = conv2(bayer,g2,'same');
h         = abs(G1)+abs(G2);

G1        = conv2(bayer,g1','same');
G2        = conv2(bayer,g2','same');
v         = abs(G1)+abs(G2);

Gh        = conv2(bayer,[0 0.5 0 0.5 0], 'same') + conv2(bayer,[-0.25 0 0.5 0 -0.25], 'same');
Gv        = conv2(bayer,[0 0.5 0 0.5 0]', 'same') + conv2(bayer,[-0.25 0 0.5 0 -0.25]', 'same');
h1        = [0 1/4 0; 1/4 0 1/4; 0 1/4 0];
h2        = [0 0 -1 0 0; 0 0 0 0 0; -1 0 4 0 -1; 0 0 0 0 0; 0 0 -1 0 0]/8;
Gmean     = conv2(bayer,h1, 'same') + conv2(bayer,h2, 'same');

switch pattern
    case 'bggr'
        F(1:2:H, 2:2:W)  = 1;
        F(2:2:H, 1:2:W)  = 1;

    case 'rggb'
        F(1:2:H, 2:2:W)  = 1;
        F(2:2:H, 1:2:W)  = 1;
    case 'grbg'
        F(1:2:H, 1:2:W)  = 1;
        F(2:2:H, 2:2:W)  = 1;
    case 'gbrg'
        F(1:2:H, 1:2:W)  = 1;
        F(2:2:H, 2:2:W)  = 1;
end
Gp                       = Gh.*(h<v) + Gv.*(h>v) + Gmean.*(h==v);
G                        = bayer.*F+(1-F).*Gp;
% figure;imshow(G,[])

%% 插值RB分量
f1           = [0.5 0 0.5];
f2           = [-1 2 -1]/4;
GRBh         = conv2(bayer,f1,"same") + conv2(G,f2,'same');
GRBv         = conv2(bayer,f1',"same") + conv2(G,f2','same');

h45          = [0 0 1; 0 0 0; -1 0 0];
h135         = [1 0 0; 0 0 0; 0 0 -1];
Gh45         = [0 0 -1; 0 2 0; -1 0 0];
Gh135        = [-1 0 0; 0 2 0; 0 0 -1];

D45          = abs(conv2(bayer,h45,'same'))+abs(conv2(G,Gh45,'same'));
D135         = abs(conv2(bayer,h135,'same'))+abs(conv2(G,Gh135,'same'));

RB45         = conv2(bayer,[0 0 0.5; 0 0 0; 0.5 0 0],'same')+conv2(G,[0 0 -0.5; 0 1 0; -0.5 0 0],'same');
RB135        = conv2(bayer,[0.5 0 0; 0 0 0; 0 0 0.5],'same')+conv2(G,[-0.5 0 0; 0 1 0; 0 0 -0.5],'same');
RBmean       = conv2(bayer,[0.25 0 0.25; 0 0 0; 0.25 0 0.25],'same')+conv2(G,[-0.25 0 -0.25; 0 1 0; -0.25 0 -0.25],'same');

D            = RB45.*(D45<D135) + RB135.*(D45>D135) + RBmean.*(D45==D135);
switch pattern
        case 'bggr'
            R(2:2:H,2:2:W) = bayer(2:2:H,2:2:W);
            R(1:2:H,2:2:W) = GRBv(1:2:H,2:2:W);
            R(2:2:H,1:2:W) = GRBh(2:2:H,1:2:W);
            R(1:2:H,1:2:W) = D(1:2:H,1:2:W);

            B(1:2:H,1:2:W) = bayer(1:2:H,1:2:W);
            B(1:2:H,2:2:W) = GRBh(1:2:H,2:2:W);
            B(2:2:H,1:2:W) = GRBv(2:2:H,1:2:W);
            B(2:2:H,2:2:W) = D(2:2:H,2:2:W);
        case 'rggb'
            R(1:2:H,1:2:W) = bayer(1:2:H,1:2:W);
            R(1:2:H,2:2:W) = GRBh(1:2:H,2:2:W);
            R(2:2:H,1:2:W) = GRBv(2:2:H,1:2:W);
            R(2:2:H,2:2:W) = D(2:2:H,2:2:W);

            B(2:2:H,2:2:W) = bayer(2:2:H,2:2:W);
            B(1:2:H,2:2:W) = GRBv(1:2:H,2:2:W);
            B(2:2:H,1:2:W) = GRBh(2:2:H,1:2:W);
            B(1:2:H,1:2:W) = D(1:2:H,1:2:W);
        case 'grbg'
            R(1:2:H,2:2:W) = bayer(1:2:H,2:2:W);
            R(1:2:H,1:2:W) = GRBh(1:2:H,1:2:W);
            R(2:2:H,2:2:W) = GRBv(2:2:H,2:2:W);
            R(2:2:H,1:2:W) = D(2:2:H,1:2:W);

            B(2:2:H,1:2:W) = bayer(2:2:H,1:2:W);
            B(1:2:H,1:2:W) = GRBv(1:2:H,1:2:W);
            B(2:2:H,2:2:W) = GRBh(2:2:H,2:2:W);
            B(1:2:H,2:2:W) = D(1:2:H,2:2:W);
        case 'gbrg'
            R(2:2:H,1:2:W) = bayer(2:2:H,1:2:W);
            R(1:2:H,1:2:W) = GRBv(1:2:H,1:2:W);
            R(2:2:H,2:2:W) = GRBh(2:2:H,2:2:W);
            R(1:2:H,2:2:W) = D(1:2:H,2:2:W);

            B(1:2:H,2:2:W) = bayer(1:2:H,2:2:W);
            B(1:2:H,1:2:W) = GRBh(1:2:H,1:2:W);
            B(2:2:H,2:2:W) = GRBv(2:2:H,2:2:W);
            B(2:2:H,1:2:W) = D(2:2:H,1:2:W);            
end
Output = cat(3,R,G,B);
end

边缘自适应插值与基于色差恒定的插值结合

\quad\quad 另外一种插值方式可以考虑先用边缘自适应插值的方式插值G通道,然后用色差恒定插值RB通道,代码略。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值