NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 9927|回复: 22

Colorbanding的处理

[复制链接]
发表于 2009-7-29 09:04 | 显示全部楼层 |阅读模式
这些天在压CLANNAD AS,碰到这么一段做烂的,真头疼。
请问这个算彩虹吗?有没有办法解掉。
024829.png
发表于 2009-7-29 12:05 | 显示全部楼层
diseacちゃん是说banding么。
颜色过渡不自然的现象始于数据精度不够。DVD和BD用的好像是8bit,但制作过程中好像一般是10bit。因此做好的东西压成BD的时候就出现了BD的数据精度不足以描述源数据的情况。YUV4:2:0让这个情况雪上加霜。YUV420的色度信号分辨率只有亮度信号的1/4,播放的时候转回RGB,有3/4的颜色都是插补出来的,过渡平滑就怪了。继续雪上加霜,TV Range的16~240的颜色范围事实上已经小于8bit了,用电视播放倒是不会出现问题,但用电脑播放时需要做YC伸张到PC Range的0~255,这一伸张不要紧,颜色数据又不够了……这就是为什么电脑播放DVD效果一直不够理想的原因。
为此好多公司都推出了自己的除Banding技术,比如索尼的SBMV(Super Bit Mapping for Video,参考这里有对比图)、IMAGICA的M.A.P.S技术。虽然两者都声称可以通过独自的技术来大幅度减轻banding、获得平滑的颜色过渡,但实现原理和技术细节似乎都没有公开(嘛……商业领域的东西嘛)。不过,要想在数据精度下降的情况下完美再现平滑的颜色过渡实在是不容易,所以很多技术实现deband其实某种意义上都是障眼法,比如给画面添加“抖动(dithering)”,让画面观感大幅提升。
dithering.jpg
(下载查看大图)
抖动看起来像不停闪动的噪声,很多情况下降噪之后banding就露出了马脚,就是这个原理。抖动会大幅度地浪费码率,如果码率不够,压出来就变成了蠕动的色块,非常难看。在BD这种有大把码率可以拿来浪费的媒体上还好,要是到了寸码寸金的BDRIP/DVDRIP里面可就囧死了。很多DVD在制作的时候也抖动过(源->在做10转8过程中添加抖动->编码,),但有时候这些抖动在经过MPEG2压缩之后会糟糕起来,明亮的场景姑且还好,但到了黑暗的场景就有可能出现RP了。所以,针对特别糟糕的场景我们可以自己再添加抖动。
抛掉那些商业应用,我们能够用到的deband,目前为只我只知道一个,那就是Soulhunter写的GradFun2DB。目前这个算法已经被移植到了mplayer和ffdshow里面。AVS滤镜可以看这里
此外在压缩的时候,打开AQ会降低“蠕动的色块”感。

本帖是在aki和rouzhou大力支持下写出来的,感谢他们!
发表于 2009-7-29 13:42 | 显示全部楼层
本帖最后由 diseac 于 2009-7-29 14:14 编辑

非常感谢dgwxx详细讲解!看完这篇文章我的心脏稍微的抖动了一下。
一直以来我都是用x264的psy-rd来解决压缩后会产生的色带问题,现在终于明白为什么x264会在打开psy-rd时自动降低chroma的qp值了。

试用了一下gradfun2db,发现将thr设为5可以解决上面图片的问题,不过随之产生了一个新问题,在色彩边缘部分会出现一圈不太显眼的光环(不知道该怎么形容,贴一张thr=50的图,猫耳朵和人物耳朵出比较明显),将参数调小到2以下就很少有这种问题了,但是不足以解决band。ffdshow的deband也有这种问题。有没有办法消除这种光环现象呢。
024829.png
发表于 2009-7-29 15:52 | 显示全部楼层
本帖最后由 akiduki 于 2009-7-29 15:54 编辑

莫名的被大虾给了credits...不回点啥总觉得对不住他
其实我也没什么精彩发言,只是顺着大虾说的两个东西引申想到了点东西,算是抛砖引玉吧。
1. 关于banding和dithering
其实banding没有什么很难理解的,和quantization带来artifacts的根源一样,都是因为数字系统有限精度产生的round-off noise,这种噪声的概率模型是uniform分布(均匀分布)的并且这种噪声是WSS(Wide Sense Stationary,即指噪声这个随机变量的均值和方差不随时间变化)的非相关过程。在随机过程里面,这种噪声一般可以用一个累加系统来描述。
既然banding的产生,是因为叠加了一个因为有限精度产生的噪声而导致原本很平滑的过渡产生了contour,那么很自然能想到,我“去掉”一个遵循同样分布的噪声不就能在一定程度上缓解banding了吗?于是这就是发明dithering的初衷。
dithering的产生有段轶事,在CYMK色系的彩色印刷报纸还是天方夜谈的时候,怎么用黑白两色形成的halftoning点阵在报纸上展现照片丰富的细节是个很大的问题。于是人们想到了在经过2值量化前加一类似噪声的随机分布信号来实现,后来这种信号就被叫做了dithering signal,而加这种信号本身的作用,无非是在一定程度上提高了原照片的动态范围。

另外,dithering是banding不完全的逆过程,因此我形容dithering的过程是“去掉”噪声,是从round-off error是噪声这个出发点看的。
从filter的角度看,dithering应该是柔化过程,而banding因为导致了相邻数据变化的加剧,是锐化过程。

比如说,两个相邻pixel的Y通道数值是177.3 177.8,而由于round-off变成了177 178,那么原本0.5的差就被放大成了1,显然人眼就更容易察觉了。而dithering的过程,就是一定程度上加一些随机的小信号,使他们也许变成了177.2 177.6。断然这不是严格意义上的可逆过程,但它比177 178显然更受眼睛的青睐。

//dithering可能带来的一个问题是,过分的柔化,比如177和178都变成了177.5,那么可以说这两个像素点的信息就丢掉一半了。
//dithering还可能导致banding问题的加剧,当然发生这个的前提在于round-off的方向和dithering方向反了,相当于再加了个噪声...

2. psy-rdo
这点是从大虾说开AQ能降低蠕动色块想开的,因为在264编码时,这两个东西合着subme就像欢喜冤家一样让人常常不知道怎么配置比较好。subme我暂且不说,个人觉得psy-rdo在通常情况下处理anime最好不要开。psy-rdo是psychovisual RDO的一种,具体怎么实现的我不太清楚,但根据我的理解,但凡psychovisual相关的东西,在用眼睛确认前,最好还是disable,因为我目前还没有发现哪种perceputal或者说主观质量相关的RD优化也好,质量衡量也罢,能真正100%吻合眼睛的多样性(这点在SSIM再说)。从DS发布这个功能在blog的轻描淡写来看,这个psy-rdo是用来increase detail retention和sharpness的,这么说从一定程度上可以理解成它以“锐利”为指导思想进行码率分配。根据我的实验,对于anime来说,或许丢失了细节的暗场,要比虽然细节满载,但已经blocky成一块碎玻璃般的情况要更讨人眼球。不过对于实写来说,情况可能就完全相反了。

另外,psy-rdo还可能造成码率的失控,这点从“提升锐度”这点就能理解了。

3. SSIM
说到暗场,大家估计都能回想出自己眼睛明锐的发现暗场的一丁点缺陷的经历,banding、blocking,甚至ringing,没谁说在一大片向日葵中轻易发现他们的吧(不过如果有人有这种能力,那也请一定说出来...
而基于PSNR的RD curve,其致命的问题就在于它孤立的机械的通过每个像素与对于参考像素的error运算获得质量评判数据,而忽视了像素之间的相关性,甚至可以说,孤立的看单个像素点,是根本无法归纳出“质量”来的。
SSIM是个好东西,倒不是说这是自己试验室发明的就来王婆卖瓜。因为它确实是我见过第一个能部分体现出人眼在暗场下对质量判断趋势的主观质量评价标准。SSIM基于的原理很简单,当人眼观察事物时,总是倾向性的去比对自己认知中熟悉的元物体(meta objects),比如房屋的轮廓,比如天空云彩的形状,这种基于结构相似性的判断往往决定了人主观质量判断的标准。另外,人眼对于自然界中不存在的物体,并没有相关的判断能力,比如给你两幅模拟信号放送电视机的雪花图,你很难说出两者有什么差别。SSIM大体上就基于这两点,在实际算法中,数值的计算式通过亮度(均值)、对比度(方差)和结构相似性(减去均值并用方差归一化后的图)来决定。

4. psy-rdo+dithering?
这个来自于vx说对于人工添加噪点的片子开启psy-rdo效果更好的实验结论。这点我倒不是很明白,个人理解是,既然psy-rdo对片子有一种增加锐度的倾向,那么自然它对本身就有噪点的片子能更好的控制码率了么?
和大虾聊天时突然觉得这样做(psy-rdo+dithering)或许是解决色块同时避免过渡dithering导致柔化的方法,从psy-rdo对片子的锐化的倾向性来说,这确实是个矛盾的配置,不过或许会有效果呢?
今天太晚了,明早起来试试吧。
 楼主| 发表于 2009-7-29 22:42 | 显示全部楼层

色階十分明顯的影片...

今日壓了幾段影片, 色階(Color stepping)問題很明顯, 有沒有甚麼辦法可以在不降低細節的情況下處理這個問題?
這段壓出來的容量很細.....比其他影片細很多

有色階問題的影片是White Album, 一話壓出來約1.06GB (1920x1080x24fps)
其他沒有問題的影片是カードキャプターさくら, 一話壓出來約2.2GB (1440x1080x24fps)

我的AVS如下:
  1. LoadPlugin("C:\DGAVCDec\DGAVCDecode.dll")
  2. LoadPlugin("AVSNV12YUY2.dll")
  3. LoadPlugin("AVSSFSIVTC.dll")
  4. return AVCSource("00001.dga", false).NV12YUY2().SFSIVTC("White Album TV Ch1 2.sfs")
复制代码
在VDubMod內已見到色階.......
 楼主| 发表于 2009-7-30 00:28 | 显示全部楼层
本帖最后由 sswroom 于 2009-7-30 00:30 编辑

2# dgwxx

颜色过渡不自然的现象始于数据精度不够。DVD和BD用的好像是8bit,但制作过程中好像一般是10bit。

DVD內是8-10bit Discrete Coefficient儲存 (一般是9-10bit, 很少用8-bit), JPEG圖檔也是10Bit精度......只是解碼器將精度降低至8bit.
XviD只支持8bit DC, 所以細節永遠比不上MPEG-2/DVD
BD沒有考夠過有多少Bit.......

因此做好的东西压成BD的时候就出现了BD 的数据精度不足以描述源数据的情况。YUV4:2:0让这个情况雪上加霜。YUV420的色度信号分辨率只有亮度信号的1/4,播放的时候转回RGB,有 3/4的颜色都是插补出来的,过渡平滑就怪了。

U/V Downsampling不會增加Color stepping, 只會令影片模糊一點, 暫時用Linear Resizer補出來的效果最好, Lancoz-3 Resizer補的話會出現藍邊的副作用。

继续雪上加霜,TV Range的16~240的颜色范围事实上已经小于8bit了,用电视播放倒是不会出现问题,但用电脑播放时需要做YC伸张到PC Range的0~255,这一伸张不要紧,颜色数据又不够了……这就是为什么电脑播放DVD效果一直不够理想的原因。

电脑播放DVD效果一直不够理想的原因:
1 很多LCD Panel只有6-bit (大部分電腦LCD).....也是靠補值補出看似8-Bit的畫面, 在高動態畫面下補bit的效果會比較差。
2 顯示卡的YUV->RGB的品質很差, 會出現色階問題 (近來的顯示卡好了點, 但也比不上軟體YUV->RGB)
3 電腦用LCD的亮度比電視低, 觀感比不上電視強烈 (這就是為何用電視看Windows的畫面會覺得刺眼)

事實上, 很多實攝的DVD是用Y16~255的範圍。
還有, U/V規格上的範圍是16~240(Y是16~235), 但是在16~64或192~240的範圍, 轉出來的RGB也已經超出了範圍, 所以大部分的動畫也沒有這個範圍的U/V數值, 相當於U/V少了一個Bit用。


在BD这种有大把码率可以拿来浪费的媒体上还好,要是到了寸码寸金的BDRIP/DVDRIP里面可就囧死了。很多DVD在制作的时候也抖动过(源 ->在做10转8过程中添加抖动->编码,),但有时候这些抖动在经过MPEG2压缩之后会糟糕起来,明亮的场景姑且还好,但到了黑暗的场景就有可能出现RP了。所以,针对特别糟糕的场景我们可以自己再添加抖动。

DVD的源是10 bit沒錯, 日本在2年前主要是用色差->電腦來輸出DVD, Noise是用A/D轉換時產生的。
近來改了製程, 是用劣質Resizer (似是Bicubic Resizer)將HDCAM的影像Resize成DVD, 產生明顯的白邊.....
黑暗的场景的問題很多時是A/D Noise再壓縮的情況。
 楼主| 发表于 2009-7-30 00:39 | 显示全部楼层
dithering是在降低精度的時候, 透過加入Noise來增加動態範圍......
如在24bit圖檔轉成256色時、24bit聲音轉16bit聲音時.....
理論上Dithering只能在Quantization前做, 再壓縮的過程中一般不會有Quantization, 所以在這裏不適合。
发表于 2009-7-30 06:29 | 显示全部楼层
等等,即使是transcoding,encoder中不也有quantization这一步么
发表于 2009-7-30 06:33 | 显示全部楼层
顯示卡的YUV->RGB的品質很差

请教下这个是因为数字系统的精度问题导致的吗?
 楼主| 发表于 2009-7-30 09:10 | 显示全部楼层
等等,即使是transcoding,encoder中不也有quantization这一步么

我們一般只能控制在Decoder後 和 Encoder前的部分, 這部分很少有精度的變化.......
Encoder內部是有Quantization, 其中只有一次是必須的 (Huffman Encoding前那一次), 這個Quantization的作法好像只是用3捨4入的形式進行(XviD年代), 沒有特別做Dithering。

请教下这个是因为数字系统的精度问题导致的吗?

現在数字系统有float/double, 精度不成問題, 只是很多時要用速度放棄精度。
我見過有些影片, 在硬體加速下, 見不到部分細節, 用軟體(HQMP)才能見到。
发表于 2009-7-30 16:48 | 显示全部楼层
sswroom刚好发了个banding的帖子,所以把老帖子里面关于banding的内容分离出来和sswroom的帖子合并了。
 楼主| 发表于 2009-7-30 17:36 | 显示全部楼层
1# diseac

diseac放出來的這格畫面的確很難處理, 其中一個難處是細節很容易被刪去 (如頭髮的線條), 另一個難處是漸變色的地方出現一層層的現像
XviD只能用CQ1來保留頭髮的線條, CQ2 (MPEG)也會刪去大部分線條。
diseac的試驗也完全刪去這些線條

漸變色的地方.....好像沒有辦法解決。
发表于 2009-7-31 11:19 | 显示全部楼层
感谢各位的讲解和精彩讨论,让我受益很多!
编码前进行deband处理的话,经过AVC的编码,这些band有时还会再出来,而且由于RIP都是用比较低的码率,还会生成更多新的band。
即使在BD这种有大把码率可以拿来浪费的媒体上,AVC编码照样也会有这种情况,感觉非常微妙。
032510.png
发表于 2009-7-31 15:34 | 显示全部楼层
这张图是压过的还是源图?

前段时间我压结婚塔2第一话一个场景,也非常惨烈。但是在AVS里面加GradFun2DB,之后psy-rd开0.4,播放的时候就算打开了ffdshow的deband,效果还不是太好。但偶然地用一台特丽珑显示器看,效果非常非常完美,没有蠕动的色块,也不见band。所以,这个跟显示器还有很多关系吧。
发表于 2009-7-31 15:49 | 显示全部楼层
14# dgwxx

是原图,dgavc解码,AVS截取。
用VRM9+FFDSHOW(不开deband)播放,色带比这张图还要严重。

显示器的影响,我觉得是有的。而且同样是LCD显示器,不同的品牌型号之间也会有各种差异吧。
我以前的CRT坏掉了,其实我真的很想看看这些色带在CRT上是什么样子。
 楼主| 发表于 2009-7-31 16:44 | 显示全部楼层
这张图是压过的还是源图?

前段时间我压结婚塔2第一话一个场景,也非常惨烈。但是在AVS里面加GradFun2DB,之后psy-rd开0.4,播放的时候就算打开了ffdshow的deband,效果还不是太好。但偶然地用一台特丽珑显示器看 ...
dgwxx 发表于 2009-7-31 15:34

不同顯示器看起來的效果的確是有分別, 但這種分別主要是由顯示器亮度不同而形成。
我之前用的是CRT顯示器, 亮度約是80-100cd/m2, 大部分失真也看不清楚。
我現在用的是LCD顯示器, 亮度約是400-450cd/m2, 等於將失真放大5倍.....
8 bit/ch YUV真的不太夠用呢.......

用ffdshow時請使用高品質的YV12->RGB, 問題會少一點
发表于 2009-7-31 16:49 | 显示全部楼层
LCD要比CRT颜色少,这个恐怕也是导致颜色不均匀的原因。
高品质YV12->RGB是默认打开的吧,这个我从来没关过。
发表于 2009-7-31 17:05 | 显示全部楼层
17# diseac
不光要打开高品质RGB变换,输出色系也要同时是RGB32才行。这样一来直接输出RGB32给渲染器,效果能好很多。
只是这种设置播放器来速度很成问题,解码、deinterlace、后处理(如果打开deblock或deband的话)、resize、高品质RGB变换等等,全部重担都压在了CPU身上。一般720p还好,MPEG2的1080i也还好,一旦到了1080i的avc就力不从心了。
 楼主| 发表于 2009-7-31 18:04 | 显示全部楼层
ffdshow慢是因為部分Filter沒有用MMX/SSE2加速....
還有, 好像所有Filter也沒有用Parallel Processing來加速。
這是ffdshow的處理不夠效率, CPU速度已足夠進行這些處理。

我現在用XviD解碼1920x1080的MPEG4, 全CPU處理也只是45%使用率....
(高碼率/120Mbps 時XviD解碼不夠快, FFDSHOW還可以)
发表于 2009-7-31 18:06 | 显示全部楼层
18# dgwxx

我是用RGB32输出的(只选了RGB32和高品质转换2个),但高品质的RGB32+deband在我的机器上是跑不动1080p的,连rip版都不行,不开deband的情况下,CPU都要占用到40-60%,所以我很在意编码前的处理呢
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2019-2-19 12:40 , Processed in 0.098909 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表