去除简单水印方法的讨论(原创)

因为前段时间跟CG方面打了不少交道,所以产生了今天的问题.

 

 

 

 

 

对于视频的合成,我们可能都需要用到很多地方的素材,来源于各个地方,包括电视台,大部分素材都有一个共同点,都加了水印或台标.可以想像,在制作我们自己的作品时,肯定不能出现别人的标志,所以我们得去除原来的水印(注:在不侵犯别人的权利的前提下).今天我们只讨论对简单水印的处理.

 

 

 

 

 

先看一张加了水印的图:

<img src=http://www.bezier.com.cn/study/1.jpg>

 

 

 

 

 

 

 

 

 

 

其实我们可以看出,这个最终的图(C)其实是用另一张标志图(B)与原图(A)叠加而得到(叠加的方式这里就不作讨论,有兴趣的可以去参看参考书),叠加时赋予了一定的透明度(Tran).

 

 

 

 

 

这时,我们可以大概的形成一个公式:

 

 

 

 

 

A+ B*Tran=C

 

 

 

 

 

但是按此公式的话,原图像没有任何修改,标志图的象素值全部叠加原图像上,最张图像应该变亮,而事实上却没有,那肯定原图像在叠加过程中也有了一定的衰减过程(Atten)

 

 

 

 

 

:

 

 

 

 

 

A*Atten + B*Tran=C

 

 

 

 

 

 

 

 

 

 

 

推测标志图增加了多少值,原图像应该减少多少,即Atten=1-Tran.

 

 

 

 

 

经测试确实是如此(测试过程省略)

 

 

 

 

 

A*(1-Tran) + B*Tran=C

 

 

 

 

 

由此,我们如果想把加过水印的图像恢复到原样,只需要:

 

 

 

 

 

A=(C-B*Tran)/(1-Tran).

 

 

 

 

 

公式已经出来了,下面我们就开时做了。

 

 

 

 

 

 

 

 

 

 

 

这时候我们引入一个常用且普通的图像文件类型:TGA

 

 

 

 

 

这种文件格式简单,它由头文件、数据文件、附加文件构成。

 

 

 

 

 

 

 

 

 

 

 

TGA头文件结构

 

 

 

 

 

struct TargaHeader

 

 

 

 

 

{

 

 

 

 

 

BYTE IDLength;

 

 

 

 

 

BYTE ColormapType;

 

 

 

 

 

BYTE ImageType;//如果为02则表示未压缩,(A0)表示压缩

 

 

 

 

 

BYTE ColormapSpecification[5];

 

 

 

 

 

<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值