图像基础和前处理

01、基本概念

1、像素

图像的基本单元,可以理解为图像中的一个点。

2、分辨率

分辨率指图像的大小或尺寸,一般用像素的个数来表示图像的尺寸。
eg:19201080的图像,共有19201080个像素。
**常见分辩率:**360P(640360),720P(1280720),1080P(19201080),4K(38402160),8K(7680*4320)。
特点:
像素就是带有颜色的小块;
不能简单认为分辨率越大图像就越清晰(如经过放大缩小等后期处理);

位深

彩色图像中像素有三个颜色值R、G、B,用多少位数来分别表示这三个颜色值则它的位深则是多少位。大多数图像和视频位深是8bit的。
特点:
位深越大,能够表示的颜色值就越多,图像可以更精确地展示真实场景。但同时所需的存储空间也越大。

灰阶

R G B三个通道的取值范围叫做灰阶,如:8位位深图像,灰阶为[0-255],总共256个灰阶值。

color range

色彩范围:R G B 取值范围,以8位位深图像为例,Full Range的灰阶范围是RGB图像[0-255],YUV为[0-255]; Limit Range的灰阶范围是RGB[16-235], Y[16-235],UV[16-240]。

注意:
为什么需要Limit Range:灰阶范围越大,图像可表达细节就越多。但是很多内容制作者,并不希望这么高的图像细节。比如:恐怖片希望在黑暗中“隐藏”一些东西,动作片需要隐诸如威亚等;实际上,现在大多电影或者视频都是Limit Range的视频。

Stride

跨距:值的是图像存储时内存中每行像素所占用的空间。为了能快速读取一行像素,一般会对内存中的图像进行内存对其(如16字节对其)。

eg:现在有一张 RGB 图像,分辨率是 1278x720。我们将它存储在内存当中,一行像素需要 1278x3=3834 个字节,3834 除以 16 无法整除。因此,没有 16 字节对齐。所以如果需要对齐的话,我们需要在 3834 个字节后面填充 6 个字节,也就是 3840个字节做 16 字节对齐,这样这幅图像的 Stride 就是 3840 了。

注意:
1、每读取一行数据的时候要跳过多余的字节,否则会出现“花屏”现象。不管是读取、渲染、存储一张图片都需要设置正确的stride。
2、即使图像的width是规则的值,如19201080,图像存储在内存中有可能stride和width3也是不一样的,尤其是不同的视频解码器内部实现不同,会导致输出的图像的stride不同。

帧率

1秒钟图像的数量就是帧率。
注意:
一般帧率达到10-12帧每秒人眼就认为是流畅的(个体会有差异);
电影院电影一般24fps(帧每秒),监控行业常用25fps。

码率

码率是指视频在单位时间内的数据量的大小,一般是1秒钟内的数据量,单位一般是kb/s,Mb/s。
注意:
码率可以是固定的,也可以是变化的。
如果是固定码率,

  1. 编码后的码率小于固定码率,填充数据
  2. 编码后的码率大于固定码率,丢弃细节数据,降低码率

02、RGB与YUV

RGB

就是指图像的每一个像素都有 R、G、B 三个颜色值。如摄像头采集的原始图像就是 RGB 图像,且显示器显示的图像也是 RGB 图像。

一般来说,RGB 图像每一个像素都是分别存储 R、G、B 三个值,且三个值依次排列存储。比如对于一张 8bit 位深的 RGB 图,每个值占用一个字节。需要注意的是 RGB 图像像素中 R、G、B 三个值并不一定是按 R、G、B 顺序排列的,也有可能是 B、G、R 顺序排列。

YUV

跟 RGB 图像中 R、G、B 三个通道都跟色彩信息相关这种特点不同,YUV 图像将亮度信息Y 与色彩信息 U、V 分离开来。Y 表示亮度,是图像的总体轮廓,称之为 Y 分量。U、V表示色度,主要描绘图像的色彩等信息,分别称为 U 分量和 V 分量。这样一张图像如果没有了色度信息 U、V,只剩下亮度 Y,则依旧是一张图像,只不过是一张黑白图像(可兼容黑白电视)。

1、YUV类型:
YUV 4:4:4、 YUV 4:2:2、 YUV 4:2:0。其中最常用的是YUV 4:2:0,区别主要是U、V分量像素点的个数和采集方式。
1、YUV 4:4:4:一个Y对应一个U和一个V;
4:2:2则是每两个Y共用一个U和一个V;
4:2:0则是每四个Y共用一个U和一个V;

2、YUV存储方式:Planar和Packed两种。
Plannar:是的YUV是先连续存储所有像素点的Y,然后接着存储所有像素点的U/V,之后在存储所有像素点的V/U;
Packed:先存储所有Y,然后U、V连续的交错存储。

3、图像大小
YUV 4:4:4:和RGB图像大小一样;
YUV 4:2:2:小于RGB图像,height为双数时是RGB 2/3大小;
YUV 4:2:0:小于RGB图像,height为4整数倍时是RGB 1/2大小;

RGB与YUV之间转换

1、RGB2YUV
在做RGB信号到YUV信号转换时,一般是先转换到YUV444格式,然后再将UV信号分辨率降低,变成所需要的YUV格式。

2、YUV2RGB
播放视频或显示图像时需要将YUV信号转成RGB信号,这个步骤成为渲染。转换时首先将缩水的UV信号的分辨率拉升到与Y信号相同的分辨率,然后再转换成RGB信号。

3、转换一般通过编码矩阵来实现[ Y U V] = [编码矩阵] * [R G B]; [R G B] = [编码矩阵] * [Y U V]。

注意:在转换时需要知道是哪个标准(BT601标清标准,BT709高清标准)的哪种color range做的转换。

03、缩放算法

应用:

只要视频的原始分辨率和播放窗口大小不一致,就需要通过缩放处理来是的视频画面适应播放窗口的大小。

算法:

目前最常用的是插值算法(ai超分算法目前比较火)。插值算法主要包括:最临近插值算法、双线性插值算法、双三次插值算法。

原理:都是使用周围已有的像素值通过一定的加权运算得到目标图像的目标像素值:将目标图像的像素位置映射到原图像的对应位置上,然后把通过插值计算得到的原图像对应位置的像素值作为目标图像相应位置的像素值。

eg:假设原图像的分辨率是 w0 x h0,我们需要缩放到 w1 x h1。那我们只需要将目标图像中
的像素位置(x,y)映射到原图像的(x * w0 / w1,y * h0 / h1),再插值得到这个像素值就可以了,这个插值得到的像素值就是目标图像像素点(x,y)的像素值。注意,(x* w0 / w1,y * h0 / h1)绝大多数时候是小数。这就是图像缩放算法原理的通用表达。

插值实现:

1、最邻近插值:
首先,将目标图像中的目标像素值映射到原图像的位置。
其次,找到原图像中离映射位置最近的四个像素。
最后,取离映射位置最近的像素的值作为目标像素。

特点:计算小,速度非常快。放大图像容易出现块状效应,缩小图像容易出现锯齿。

2、双线性插值:
线性插值原理:以距离作为权重的插值方式,距离越近权重越大,距离越远权重越小。
eg: x1-x2之间存在一个点x,通过线性插值得到x的值,如下:
val(x) = val(x1)((x2-x)/(x2-x1)) + val(x2)((x-x1)/(x2-x1))

双线性插值与最临近插值一样取最近的四个点,不同的是最临近插值另外三个值的权重的为0,双线性插值四个点的权重由距离来确定。
原理:先通过x方向两次线性插值得到m、n两个点,在通过m、n两点y方向上的线性插值得到最终想要的p点。

3、双三次线性插值
第一,取周围16个像素;
第二,通过一个特殊BiCubic基函数来计算权重(分别计算x,y权重,相乘得到最终权重);
第三,计算16个像素加权平均值,得到目标像素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值