bayer插值算法(3):高质量线性插值算法

本文介绍了相机从bayer阵列转换到RGB图像所需的Bayer插值算法,特别是高质量线性插值算法。该算法考虑了不同通道之间的相互影响,通过8种5x5滤波器进行像素估算,提高了色彩还原的准确性。
摘要由CSDN通过智能技术生成

目录

前言

插值算法

高质量插值算法

代码示例


前言

相机生成的图像一般是bayer阵列的raw图,这时候如果转换成我们需要的rgb图像,就需要对应的bayer插值算法将丢失的rgb信息通过算法补齐

插值算法

常见的插值算法一般有如下几种

高质量插值算法

该方法由Malvar等人提出。高质量插值背后的想法是,要对每个通道中的丢失像素进行插值,仅使用位于同一通道上的相邻像素可能并不准确。换句话说,为了内插图2中的Gx等绿色像素,我们需要使用其相邻绿色像素的值以及现有通道的值。例如,如果在Gx的位置有一个红色值,则必须使用该值以及相邻的可用绿色值。他们称其为方法梯度校正插值。

最后,他们提出了8种不同的5 * 5滤镜,如图3所示。我们需要将滤镜卷积为要插值的像素。

例如,如果我们要估计绿色像素的值,而我们在该位置具有红色像素的值,则需要使用第一个过滤器。我们需要将滤波器中给定的权重乘以给定通道的值,然后将其平均值除以8,因为每个滤波器的权重之和为8。

代码示例

void ClearBorders(uint8_t *rgb, int sx, int sy, int w)
{
    int i, j;
    // black edges are added with a width w:
    i = 3 * sx * w - 1;
    j = 3 * sx * sy - 1;
    while (i >= 0) {
        rgb[i--] = 0;
        rgb[j--] = 0;
    }

    int low = sx * (w - 1) * 3 - 1 + w * 3;
    i = low + sx * (sy - w * 2 + 1) * 3;
    while (i > low) {
        j = 6 * w;
        while (j > 0) {
            rgb[i--] = 0;
            j--;
        }
        i -= (sx - 2 * w) * 3;
    }
}
int bayer_HQLinear(const uint8_t *B2R_RESTRICT bayer, uint8_t *B2R_RESTRICT rgb, int sx, int sy, int tile)
{
    const int bayerStep = sx;
    const int rgbStep = 3 * sx;
    int width = sx;
    int height = sy;
    int blue = tile == DC1394_COLOR_FILTER_BG
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值