首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

水印处置算法提问

2012-12-31 
水印处理算法提问我想做一个水印嵌入算法,具体的步骤是这样的:嵌入过程:1:读入原始lena图像,进行DCT变换2:

水印处理算法提问
我想做一个水印嵌入算法,具体的步骤是这样的:
嵌入过程:
    1:读入原始lena图像,进行DCT变换
    2:读入watermark
    3:取lena的dct图像的高频区域,这个区域和watermark的大小一样,进行第二次DCT变换。
    4:将watermark的数据每个像素值乘以0.002加到第二次DCT变换的结果上。
    5:将经过二次DCT的lena图像进行两次逆DCT变换。生成新的图像embeded.bmp图像

提取水印过程:
    1:读入lena图像和embeded图像,原始水印图像。
    2:对lena图像和embeded图像进行DCT变换。
    3:取出lena和embeded经过DCT变换的高频区域图像进行2次DCT变换。
    4:将第二次DCT变换的数据想减然后乘以500,生成水印图像。

这个算法理论上可行,并且嵌入成功,看不出有水印的痕迹,嵌入效果是可以的,但是提取就不正常了,压根就没法看,我怀疑和double的精度有关系,代码用C写的,大家看这个过程有问题么?谁能告诉我按照这个过程为什么提取不出水印?
[解决办法]
噪声会有影响。另外,如果图片是以压缩格式(如,JPG格式)保存的,也会有影响。
[解决办法]
我的感觉是由于对watermark的系数是0.002,比较小的数值,然后经过C语言的double处理,以及保存、读入等操作,不可避免地对原来小数值造成较大失真;还有DCT变换是有截断效应的,这个因素也要考虑。上述因素对于较大值可能无所谓,但是对于较小值(楼主乘以0.002),这些影响因素就不能不考虑了。
[解决办法]
在做数值运算的时候,由于要涉及到截取和近似,因此会给小数值的变量带来很大的影响,这一点一定要注意。

热点排行