Open
Description
感谢作者,感觉还挺好用的。
代码还没细看,先跑了点测试。然后有些问题请教一下。
加了个jpg压缩的参数
cv2.imwrite(output_filename, img_data, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
png也有对应的IMWRITE_PNG_COMPRESSION,但那个有损得比较厉害,不太用到。
jpg的还是挺常用的。
做了一些测试
同水印大小不同源图大小
- plot_src256_wm32_block4_jpg60-100_mod16-32
- plot_src512_wm32_block4_jpg60-100_mod16-32
- plot_src1024_wm32_block4_jpg60-100_mod16-32
显然大图包含信息更多,还原更精准。(横坐标为jpg品质,纵坐标为mod)
水印刚好是图源1/8
- plot_src256_wm32_block4_jpg60-100_mod16-32
- plot_src512_wm64_block4_jpg60-100_mod16-32
- plot_src1024_wm128_block4_jpg60-100_mod16-32
大图有好一些,但优势不明显。(个人理解是承载信息的范围和信息本身在同比增加,压缩之后干扰程度也就差不多)
接合上一条,也许水印可以有一个上限,比如128的bitmap,足够承载较多的内容。
block的影响
同样源图用到最大水印 block4->1
这里都是256的原图,分别用了32的水印和128的水印,明显128的品质更好,但block少了。
同样源图/水印/仅改变block
- plot_src512_wm32_block2_jpg60-100_mod16-32
- plot_src512_wm32_block3_jpg60-100_mod16-32
- plot_src512_wm32_block4_jpg60-100_mod16-32
- plot_src512_wm32_block8_jpg60-100_mod16-32
我的理解是block越多,单个block就越小,能承载的信息越少,所以解码质量越低。
这里我源码还没细看,请问block在这里的作用是什么?从原图反解码的效果来看是越少品质越好,那block增加是能实现什么效果呢?防遮挡,多处采样比较吗?
其他一些问题
- 从多次保存等情况下看,jpg还是按60的标准来处理比较保险,那样的话貌似mod就只能取24-32这个范围。
- 请问block具体作用是什么?有没有所谓的上限,比如4就足够应付大部分场景了?
考虑自动根据源图生成参数
- 另外逆向出来水印的质量,除了除数,还是和图片/水印大小,block分区,压缩品质,源图大小及保护价值(源图太小就牺牲block)等各种因素相关。
- 我现在考虑能不能自动根据源图大小(锁定源图和jpg60这两个参数),自动判断所需的block/水印尺寸/除数,这三个参数,获得一个画质和保护的平衡。
- 解码的时候考虑方式一是通过上述的自动参数来做,二是固定水印大小(比如128/64/32/16)试个4次,变相自动。
读完源码自答一下
block有一个比较隐蔽的问题是配合dwt,要凑到8px,因为jpg是按8px来压缩的,也就是block*(2^dwt_deep)刚好。
block过小,运算量几何级数增加,效率过慢。而且block过细,会导致画面有明显噪点感。
block过大,解高压缩的jpg水印会出问题。
jpg60时,block数量的宽高,达到水印2倍后解水印质量不错。比如画布1024,dwt1次,有效画布512,block4,可记载宽度128,如果用来记载32的水印,就达到了4:1,解水印效果就很好。
Metadata
Metadata
Assignees
Labels
No labels