fch1993
帖子: 213
注册时间: 2012-06-12 11:56

MADVR的gamma和linear light问题。

http://u2.dmhy.org/details.php?id=14209#109337
源于这里对于MADVR做gamma转换的问题。
首先我做了MADVR排除其他选项(尤其是显示器选项)的调色问题。对视频源做了如下两次截图。(由于gamma只与luma有关)
avs 使用nnedi3_resize16
图片

MADVR使用MPC-BE
图片



之后是做200%放大,到1696x960之后的结果

首先是我认为可以作为参考标准的还原画质
nnedi3_resize16

图片

MADVR linear light
图片

MADVR gamma-aware(CPU)
图片


MADVR gamma-aware(GPU)
图片

可以确认是否使用GPU对于MADVR的结果几乎没有影响。

我来看看最后结果的区别吧:(使用imgdiff做差别区分)
linear light vs nnedi3_resize16
图片
图片


gamma-aware vs nnedi3_resize16
图片
图片

结果统计
linear light vs nnedi3_resize16
图片

gamma-aware vs nnedi3_resize16
图片

结果显示的是linear light可以获得更加接近nnedi3_resize16的结果,无论是最大误差还是误差点数还是最后的平均值和标准差等等。gamma-aware的结果都更不解近nnedi3_resize16。

1.对画面对比度的失真会很明显,那如果说这个是正确的,那nnedi3_resize16中也没有加入任何和gamma有关的东西,但是它却是大家比较公认的最好的upconv滤镜(不仅仅是chroma upsmapling滤镜),是不是这个标准定义上有问题。
2.如果说nnedi3_resize16作为标准,那么gamma-aware后的结果反而更加不接近nnedi3_resize16的结果,相反linear light更加接近。那是不是可以说linear更好一些呢?

PS:我的MADVR设置
图片
图片
图片
图片
图片
图片
头像
Billy Herrington
帖子: 83
注册时间: 2013-01-09 9:54

Re: MADVR的gamma和linear light问题。

IIRC, nnedi3 was trained in gamma corrected values. It just does not touch the original pixels, but only interpolates the missing parts ( e.g. half the pixels if double height ), thus it does do interpolation with a gamma-awared training map, without needing to do gamma<->linear conversion internally. If one only needs nnedi3 to do what nn+edi should work but not the fallback part, it is good enough. So if nnedi3_resize16 fails to do a gamma-aware resize, it is either what was designed of the custom fallback part of nnedi3, which is its cosmosuperb-awesome resizer as a new fallback if I understand nnedi3_resize16 in a correct way, or something went wrong in nnedi3_resize16. If the target of nnedi3_resize16 was not a gamma awared resizer at all, it should not use nnedi3 in the first place. Otherwise the fallback would not match the edge parts correctly.
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: MADVR的gamma和linear light问题。

之前nnedi3_resize16是v1.x的时候是有gamma-aware resize的支持,后来更新v2.0的时候被我去掉了,因为当时考虑到gamma影响最大的edge部分都交由nnedi3处理了,所以其他区域是否用gamma-aware都影响不大。
当然有个问题就是在nnedi3进行upscale以后需要用Dither_resize16来对三个平面分别修正center shift并且resize到目标分辨率,所以这里是否进行gamma-aware resize就会对edge部分有影响。
于是更新了nnedi3_resize16 v2.5,把gamma的处理又加回来了。
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: MADVR的gamma和linear light问题。

今天又测试了一下一些图片的缩放。

首先是这张:
图片
进行1/2的downscale没有疑问,gamma-aware resize的情况下中间两条的颜色是相同的,linear resize则是左边比右边深。
进行2的upscale的话,gamma-aware resize中间两条也是相同的,但是nnedi3的interpolation结果则是左边比右边深,这更加接近于linear resize的结果。
► 显示剧情透露 downscale测试结果
► 显示剧情透露 upscale测试结果,点击查看原图
然后是这张:
图片
进行1/2的downscale时,linear的YUV/RGB resize得到的是较暗的有色结果(两者也有轻微区别),gamma-aware的YUV resize得到的是较亮的有色结果,而gamma-aware的RGB resize得到的是全灰的结果。
进行2的upscale时linear的YUV/RGB resize得到的是较暗的有色结果,gamma-aware的YUV resize得到的是较亮的有色结果,gamma-aware的RGB resize得到的是全灰的结果,RGB48Y输入nnedi3_resize16+curve="srgb"得到的是介于全灰和较暗有色之间的结果。
► 显示剧情透露 upscale测试结果,点击查看原图

从这里看来gamma-aware是应该应用于RGB,在Y上用gamma-aware resize会导致这种非greyscale的高频信息得不到正确的结果。这也就是为什么madVR和Dither_srgb_display都是先转成Linear RGB再进行resize的原因。但是nnedi3_resize16的设计思路就是YUV的分别resize,再加上上面那个nnedi3的upscale结果并不符合gamma-aware resize的结果,让我怀疑在nnedi3_resize16里使用gamma-aware resize的正确性。

回到 “解码 播放 字幕 / Decoder playback and subtitles”