NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 7901|回复: 9

[AVS技巧] 观察色度信息的小工具:viewChroma v0.2 (for AVS 2.5.3+)

    [复制链接]
发表于 2009-12-9 00:29 | 显示全部楼层 |阅读模式
本帖最后由 diseac 于 2009-12-10 07:24 编辑

此脚本用于肉眼观察YUV模式下的色度信息。
用于AVS 2.5.3+,不推荐在2.6.0及更高版本使用。
10日修改:v0.2 - 增加 mode 5 / 6

参数说明:

mode = 1 / 2 / 3 / 4 / 5 / 6 【默认1】
1:黑屏+色度显示
2:白屏+色度显示
3:黑屏+色度+反转颜色显示
4:白屏+色度+反转颜色显示
5:将U当作Y显示,新Y=旧U,新UV=128
6:将V当作Y显示,新Y=旧V,新UV=128
一般情况下推荐用1和4

pt :片源的色空间 【默认YV12】

脚本代码:
  1. function viewChroma(clip v, int "mode", string "pt"){
  2. pt = default(pt,"YV12")
  3. mode = default(mode,1)
  4. last = v
  5. chr = (mode==1 || mode==3) ? blankclip(framecount,width,height,pt,framerate,color=$000000)
  6. \ : (mode==2 || mode==4) ? blankclip(framecount,width,height,pt,framerate,color=$FFFFFF)
  7. \ : v
  8. mergechroma(chr,last)
  9. (mode==3 || mode==4) ? invert : nop
  10. mode==5 ? v.utoy : nop
  11. mode==6 ? v.vtoy : nop
  12. mode==1 ? subtitle("viewChroma mode 1 : luma=black")
  13. \ : mode==2 ? subtitle("viewChroma mode 2 : luma=white")
  14. \ : mode==3 ? subtitle("viewChroma mode 3 : luma=black(invert)")
  15. \ : mode==4 ? subtitle("viewChroma mode 4 : luma=white(invert)")
  16. \ : mode==5 ? subtitle("viewChroma mode 5 : Avisynth - UtoY()")
  17. \ : mode==6 ? subtitle("viewChroma mode 6 : Avisynth - VtoY()")
  18. \ : subtitle("viewChroma error : invalid argument mode="+string(mode))
  19. return (mode==1 || mode==2 || mode==3 || mode==4) ? converttorgb : last
  20. }
复制代码

评分

1

查看全部评分

发表于 2009-12-9 07:02 | 显示全部楼层
为咩不用masktools2里面的一些support operators或者LUT operators
发表于 2009-12-9 09:46 | 显示全部楼层
MT那高级玩意儿不是谁都会用滴……
秋月不妨试着用MT把楼主的东西改造一下,做一个viewChromaMod?
 楼主| 发表于 2009-12-9 11:27 | 显示全部楼层
为咩不用masktools2里面的一些support operators或者LUT operators
akiduki 发表于 2009-12-9 07:02


因为masktools只支持YV12
另外不用任何插件使用起来比较方便一些
发表于 2009-12-9 12:25 | 显示全部楼层
回复 4# diseac


    唔 刚才和大虾讨论了下 觉得viewChroma似乎还有写不明确/存疑的地方
首先是我不清楚viewChroma的作用为何?如果是为了观察u和v通道的内容,我可能想到的办法是单独提取出来用伪色(RGB色域)显示,不知为何d叔您要加上黑或者白色的mask实现。因为黑或者白色的mask,似乎会改变uv之间的关系,我在下面说来。

其次就是拿黑色白色的chroma与原clip merge这一步了
这里我假设源信息中某个像素的uv值分别是u1、v1,另一个任意位置像素的uv值分别是u2、v2,如果要衡量这个操作是否会破坏信息,我从两个方面考虑
1. u1,v1之间的比值在merge前后没有发生变化(u2、v2类似)
2. u1和u2,以及v1和v2之间的比值在merge前后没有发生变化
根据Y'CbCr和RGB之间的转换公式,当R=G=B=0/255时,Cb、Cr都是128。(601和709下皆相同)
那么变换后u1、v1;u2、v2的值会变成
u1+128、v1+128;u2+128、v2+128。
虽然显然这样的结果对于每个pixel来说相当于整体提升了dc电平值看似线性操作,但实际上改变了源信息相对点/通道之间的比例关系。
比如u1+128/v1+128 <> u1/v1,再比如u1+128/u2+128 <> u1/u2,而且更糟糕的是,还无法找到一个const比例a,让a*(u1+128/u2+128) = u1/u2。。。
所以我对这样merge之后是否会丢失源信息中的关键细节持保留态度。

究其原因,我觉得仍然是忽视了Y'CbCr中CbCr和真实色度之间有区别这个事实而导致的,我上周末翻了一篇关于色彩用语正名的文章,不嫌弃的话可以去看看...
所以下面是广告时间: http://akiduki.org
 楼主| 发表于 2009-12-9 15:02 | 显示全部楼层
本帖最后由 diseac 于 2009-12-9 15:10 编辑
回复
akiduki 发表于 2009-12-9 12:25
其次就是拿黑色白色的chroma与原clip merge这一步了


是把片源的chroma混合到黑板或白板上,变相的将片源的luma设置成全黑或全白
AVS的mergechroma仅仅是将clip1的chroma删除,用clip2的chroma替换掉,所以这里并没有任何转换和重新采样
至于转换成RGB是为了不让VDM等显示/播放工具来做采样转换
至于误差,肯定是有的。
发表于 2009-12-9 21:17 | 显示全部楼层
回复 5# akiduki
mergechroma执行的是加减操作还是直接覆盖?
是用对象把目标的UV盖掉,还是在目标的UV上执行加减操作?
如果是前者,就不存在秋月说的问题了。

希望证实。
发表于 2009-12-9 22:42 | 显示全部楼层
回复 7# dgwxx


MergeChroma(clip clip1, clip clip2 [, float weight])
These filters make it possible to merge luma or chroma or both from a videoclip into another. There is an optional weighting, so a percentage between the two clips can be specified. Merge is present in v2.56.
The weight defines how much influence the new clip should have. Range is 0.0 to 1.0, where 0.0 is no influence and 1.0 will completely overwrite the specified channel (default).


Mergechroma(v,mask,1)?
发表于 2009-12-9 23:07 | 显示全部楼层
默认值weight=1.0
发表于 2009-12-10 00:40 | 显示全部楼层
嗯 那就没有问题了...
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

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

GMT+8, 2024-5-11 06:24 , Processed in 0.175244 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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