通过傅立叶转换对图片增加盲水印

嗯,很多公司内部oa或者im都加了水印,比如著名阿里月饼事件

brew install fftw
brew install imagemagick --with-fftw


convert test.jpg -fft fft.png
convert mark.png -rotate 180 mark1.png
convert fft-1.png mark.png -gravity northwest -geometry +1382+1124 -composite fft-2.png
convert fft-2.png mark1.png -gravity southeast -geometry +1382+1124 -composite fft-1.png
convert fft-0.png fft-1.png -ift -crop 3264x2448+0+0 test1.jpg
convert test1.jpg -fft fft1.png

上面的命令中,convert就是ImageMagick的主命令。test.jpg为测试图片,大小为600x600,mark.png为透明PNG图片水印,大小为160x120。
这个例子裡用的是明文水印,会在目标图片裡留下一些纹理,作编码分散后会好很多,这裡从略。

第一句就是把test.jpg作傅立叶变换,生成两个图片:fft-0.png和fft-1.png。其中fft-0为影象的幅度谱,fft-1为相伴谱(即频域)。
第二句生成一个旋转180度的水印图,用于生成对称水印。
第三句就是在相位谱左上方三分之一的位置放一个水印图,具体位置可以自己调整,越往左上,水印能量越小,也就越容易丢失,越往中间则对目标图片影响越大。
第四句与第三句一样,只是对称地在右下方放一个旋转过的水印。
第五句作傅立叶逆变换并裁剪(因为转换后图片会变成方形)生成目标图片。
第六句则是把目标图片作傅立叶变换,之后就可以在fft1-1.png裡看到水印了。

posted @   从雍和宫走到电影学院  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示