双线性插值算法与RGB空间下的像素突变以及缓存问题

参考文章:

一篇文章为你讲透双线性插值 - 知乎 (zhihu.com)

代码来自:无双软件学院

原理:

设计思想:

插值像素来自于指定坐标相邻两行像素;

注意问题:

缩小的情况:

可能某些行并不是当前所输出行所需要的行,这些是会被过滤掉的(需要设计电路来过滤);

放大的情况:

如果没有使用DDR3缓存,按需取数,而放大的情况;

输入了一定的数据的情况下,可能会覆盖已储存的行,所以要增加更多的BRAM来缓解这个问题,我目前采用四个ram存了四行数据;

我认为这应该存在某种比例关系,但是计算比较复杂。

细节解析:

已知插值像素来自于相邻两行像素,所以至少要存两行才能满足数据要求;

而我们也需要根据公式决定是否要支取行数据来完成工作;

运算步骤:

源坐标计算

对于目标图像中的每个像素 (i, j),计算其在源图像中对应的浮点坐标 (src_xf, src_yf):
src_yf = ((i-1) + 0.5) * sy - 0.5;
src_xf = ((j-1) + 0.5) * sx - 0.5;
这里,(i-1) + 0.5 和 (j-1) + 0.5 将像素中心的坐标转换为从0开始的坐标系中的位置,乘以 sy 或 sx 是为了将目标图像坐标映射回源图像坐标。最后减去0.5是为了调整到源图像的坐标系。

相邻像素索引确定

  • 通过 floor 函数计算出浮点坐标最接近的整数坐标 src_x0, src_y0,这两个坐标标记了目标像素对应的源图像像素的左上角:
          src_xf = ((j-1) + 0.5) * sx - 0.5;
          if(src_xf<0)
              src_x0 = 0;
          else
              src_x0 = floor(src_xf);% 向下取整
          end
          
          src_x1 = src_x0 + 1;  

          if(src_yf<0)
              src_y0 = 0;
          else
              src_y0 = floor(src_yf);
          end

          src_y1 = src_y0 + 1;

插值系数计算

  • 计算插值系数 uv,这些系数表示目标像素在源图像对应四个像素网格中的相对位置:
u = src_yf - src_y0;
v = src_xf - src_x0;
ru = 1 - u;
rv = 1 - v;

双线性插值

  • 根据计算的系数,从四个邻近的源像素中获取像素值并进行加权平均:(这里要注意边界的处理)
if (src_y0 >= row - 1 && src_x0 >= col - 1)
    line_data(i,j) = src_data(src_y0+1,src_x0+1);
elseif(src_y0 >= row - 1)
    line_data(i,j) = ru_rv * src_data(src_y0+1,src_x0+1) + ru_v * src_data(src_y0+1,src_x1+1);
elseif(src_x0 >= col - 1)
    line_data(i,j) = ru_rv * src_data(src_y0+1,src_x0+1) + u_rv * src_data(src_y1+1,src_x0+1);
else
    line_data(i,j) = ru_rv * src_data(src_y0+1,src_x0+1) + ru_v * src_data(src_y0+1,src_x1+1) +
                     u_rv * src_data(src_y1+1,src_x0+1) + u_v * src_data(src_y1+1,src_x1+1);
end

像素突变

在使用双线性插值算法对 RGB 图像的每个通道分别进行插值,然后将结果转换为 RGB565 格式时,可能出现像素突变。

可以选择在YCbCr空间完成ISP;

YCbCr色彩空间

  • 优点:YCbCr 色彩空间将颜色信息分为亮度(Y)和色度(Cb和Cr)分量,这对于压缩和视频处理非常有用。在处理视频或需要进行色彩分量分离的应用中,对亮度分量进行高质量插值,而对色度分量使用较低质量的插值,可以有效地节约资源。
  • 缺点:虽然 YCbCr 适用于压缩和传输,但它不一定提供与 Lab 相媲美的视觉均匀性。在从 YCbCr 转换回 RGB 或其他色彩空间时也可能引入误差。

 

posted @ 2024-06-25 17:51  NoNounknow  阅读(31)  评论(0编辑  收藏  举报