留一个备份 英语:ZT: 关于视频信号里面YUV,RGB取值范围的一些帖子(页 1) - 软件应用和视频技术...
来源:百度文库 编辑:偶看新闻 时间:2024/05/06 12:23:56
我把以前写过的东西做一个整理,因为时间的关系,我没有办法把每一个细节都讲得非常的详细,不过我会把大概的原因,和处理的方法,尽量用很精简的方式,条列整理出来。如果对更深入的原理有兴趣,请搜寻过去零散的讨论。
一切都要从 ITU-R BT.601 这个"建议"开始说起。
现今的 DVD/VCD/DV 都是遵循 ITU-R BT.601 这个规格,这个规格规定了,模拟影像转数字时,取样的方式,储存的数据格式、数据范围等等。
当影像转为 MPEG 的时候,RGB 数据要转成 MPEG 使用的 YUV 格式。ITU-R BT.601 里面规定了这个 RGB <-> YUV 的转换式,数据范围 0~255 的 RGB 要转为 YUV 的时候,要先做数据范围的压缩,把范围压缩成 16~235,然后才转成 YUV 储存起来。然后 MPEG 解压缩的时候,解出来的 YUV,要做数据范围的扩张,将 Y: 16~235, UV: 16~240 的数据扩展为 0~255 的 RGB,也就是还原回原来的 RGB 数值,然后才能显示在显示器的屏幕上。
这个 0~255 RGB -> 16~235 YUV 的过程,就叫做 YC 压缩。
反过来 16~235 YUV -> 0~255 RGB 的过程就叫做 YC 伸张。
我们可以很清楚地看到,YC 伸张和压缩要互相搭配,最终显示出来的结果才正确。
如果:
A. 播放时
1. 转 MPEG 的时候没有做 YC 压缩,储存的是 0~255 的 YUV,播放时就不可以做 YC 伸张,否则 0~255 的资料再伸张一次,会变成 -19~278。当然,8 bits 的数据储存范围只能是 0~255,数据超出的范围会被削掉(clipping),整个画面对比会过强,色彩会崩溃。
2. 转 MPEG 的时候有做 YC 压缩,储存的是 16~235 的 YUV,播放时就一定要做 YC 伸张,如果不做 YC 伸张,显示的是 16~235 YUV -> 16~235 RGB。RGB [235,235,235] 在显示器上看起来不是纯白,而会有点灰灰的,[255,255,255] 才是纯白。
相同的,[16,16,16] 看起来也不会是纯黑,[0,0,0] 才是纯黑。
16~235 的 RGB,数据范围(动态范围)缩小,对比会变差,色彩黯淡,看上去好像蒙上了一层白纱。
显示卡的 DirectDraw Overlay,使用硬件的 YUV -> RGB 色彩空间转换,都会遵守 ITU-R BT.601 的建议,认为 MPEG 的 YUV 数据范围应该是 16~235,所以都会做 YC 伸张。
所以我们可以得到结论,当转成 MPEG 的时候,一定要确保 YUV 的数据范围是 16~235,这样在计算机上看、在电视上看,才会看到正确的色彩、对比表现。
所以
B. 压缩时
1. 如果输入的 RGB 数据范围是 0~255,转 MPEG-2 时就要先做 YC 压缩,转成 16~235 的 YUV,这样将来播放时显示才会正确。
2. 如果输入的 RGB 数据范围是 16~235,转 MPEG-2 时就不能做 YC 压缩,要直接转成 16~235 的 YUV,这样将来播放时显示才会正确。
如果输入的是 16~235 RGB,转 MPEG 时又再做一次 YC 压缩,数据范围会变成 30~218 YUV,这样即使将来播放时做 YC 伸张,还是只能伸张到 16~235 的 RGB,结果还是不对。
那么,重点就是
1. 怎么知道输入的讯源是 16~235 RGB,还是 0~255 RGB?
2. 怎么知道压缩的 MPEG 软件在转 RGB -> YUV 的时候会做 YC 压缩,还是不做 YC 压缩?
一切都要从 ITU-R BT.601 这个"建议"开始说起。
现今的 DVD/VCD/DV 都是遵循 ITU-R BT.601 这个规格,这个规格规定了,模拟影像转数字时,取样的方式,储存的数据格式、数据范围等等。
当影像转为 MPEG 的时候,RGB 数据要转成 MPEG 使用的 YUV 格式。ITU-R BT.601 里面规定了这个 RGB <-> YUV 的转换式,数据范围 0~255 的 RGB 要转为 YUV 的时候,要先做数据范围的压缩,把范围压缩成 16~235,然后才转成 YUV 储存起来。然后 MPEG 解压缩的时候,解出来的 YUV,要做数据范围的扩张,将 Y: 16~235, UV: 16~240 的数据扩展为 0~255 的 RGB,也就是还原回原来的 RGB 数值,然后才能显示在显示器的屏幕上。
这个 0~255 RGB -> 16~235 YUV 的过程,就叫做 YC 压缩。
反过来 16~235 YUV -> 0~255 RGB 的过程就叫做 YC 伸张。
我们可以很清楚地看到,YC 伸张和压缩要互相搭配,最终显示出来的结果才正确。
如果:
A. 播放时
1. 转 MPEG 的时候没有做 YC 压缩,储存的是 0~255 的 YUV,播放时就不可以做 YC 伸张,否则 0~255 的资料再伸张一次,会变成 -19~278。当然,8 bits 的数据储存范围只能是 0~255,数据超出的范围会被削掉(clipping),整个画面对比会过强,色彩会崩溃。
2. 转 MPEG 的时候有做 YC 压缩,储存的是 16~235 的 YUV,播放时就一定要做 YC 伸张,如果不做 YC 伸张,显示的是 16~235 YUV -> 16~235 RGB。RGB [235,235,235] 在显示器上看起来不是纯白,而会有点灰灰的,[255,255,255] 才是纯白。
相同的,[16,16,16] 看起来也不会是纯黑,[0,0,0] 才是纯黑。
16~235 的 RGB,数据范围(动态范围)缩小,对比会变差,色彩黯淡,看上去好像蒙上了一层白纱。
显示卡的 DirectDraw Overlay,使用硬件的 YUV -> RGB 色彩空间转换,都会遵守 ITU-R BT.601 的建议,认为 MPEG 的 YUV 数据范围应该是 16~235,所以都会做 YC 伸张。
所以我们可以得到结论,当转成 MPEG 的时候,一定要确保 YUV 的数据范围是 16~235,这样在计算机上看、在电视上看,才会看到正确的色彩、对比表现。
所以
B. 压缩时
1. 如果输入的 RGB 数据范围是 0~255,转 MPEG-2 时就要先做 YC 压缩,转成 16~235 的 YUV,这样将来播放时显示才会正确。
2. 如果输入的 RGB 数据范围是 16~235,转 MPEG-2 时就不能做 YC 压缩,要直接转成 16~235 的 YUV,这样将来播放时显示才会正确。
如果输入的是 16~235 RGB,转 MPEG 时又再做一次 YC 压缩,数据范围会变成 30~218 YUV,这样即使将来播放时做 YC 伸张,还是只能伸张到 16~235 的 RGB,结果还是不对。
那么,重点就是
1. 怎么知道输入的讯源是 16~235 RGB,还是 0~255 RGB?
2. 怎么知道压缩的 MPEG 软件在转 RGB -> YUV 的时候会做 YC 压缩,还是不做 YC 压缩?
raw rgb 转换成 RGB或YUV 的芯片
RGB信号、视频信号都是指的什么啊
这个新闻题目里面的ZT是什么意思?
视频信号?
关于电视显示电脑视频信号疑问?
关于显示器忽然收不到视频信号
关于颜色RGB模式的问题,谢谢
关于颜色RGB模式的问题
YUV格式是什么意思
YUV格式是什么东东?
YUV文件怎么处理?
求助关于监控视频信号水平条纹干扰问题
ZT是什么意思?
zt 是什么意思
zt是什么意思?
zt是什么意思?
ZT是什么
YUV和YCbCr的区别
视频信号问题
视频信号制式
没有视频信号?
视频信号放大
ZT是什么意思?很多人加ZT
请问哪里有血压计里面的水银柱的图片,或者知道那种颜色的RGB值。