NEC算法在数字水印中的应用——DCT变换域嵌入

需积分: 46 4 下载量 179 浏览量 更新于2024-08-16 收藏 2.86MB PPT 举报
"本章节主要介绍了数字水印技术中的变换域算法,特别是NEC(Non-Erasable Coding)算法,该算法是在DCT变换域中嵌入水印,以实现水印的隐藏和保护。" 在数字水印技术中,水印的加载方式可以分为空间域水印和变换域水印。空间域水印直接在原始图像的数据上添加水印,而变换域水印则是在对图像进行某种数学变换(如DCT离散余弦变换)之后添加水印。NEC算法是一种变换域水印技术,它基于扩频技术,适用于在DCT系数中嵌入水印,以提高水印的不可见性和鲁棒性。 NEC算法的核心在于选择合适的DCT系数来嵌入水印。DCT变换将图像从空间域转换到频率域,分为DC系数和AC系数。DC系数代表图像的整体平均亮度,而AC系数则表示图像的细节和纹理。在视觉效果上,修改DC系数通常会显著影响图像的整体亮度,而修改AC系数则可能影响图像的局部细节。为了保持水印的不可见性,NEC算法倾向于将水印嵌入AC高频系数中,因为这些系数对应于人眼不太敏感的图像区域。 然而,仅仅考虑水印的不可见性是不够的,还需要考虑其鲁棒性。在面对如JPEG压缩等攻击时,NEC算法需要选择那些在压缩过程中相对稳定的系数位置。在JPEG压缩中,AC系数会受到量化过程的影响,部分高频系数可能会被完全消除,因此,NEC算法可能会选择在量化影响较小的AC系数处嵌入水印,以增加水印的生存能力。 NEC算法的具体实现通常包括以下步骤: 1. 对原始图像进行DCT变换,得到DCT系数矩阵。 2. 扩展1bit的水印信息为一个能量小的水印序列,这个序列通常与图像的尺寸相匹配。 3. 选择合适的AC高频系数进行微小调整,嵌入水印序列。 4. 进行逆DCT变换,将水印嵌入后的DCT系数矩阵转换回空间域,得到带有水印的新图像。 性能分析通常会涉及水印的嵌入强度、不可见性以及对各种攻击(如压缩、滤波、剪切等)的鲁棒性。通过实验和仿真,可以评估NEC算法在实际应用中的表现,并进行优化。 NEC算法是一种利用DCT变换域特性实现数字水印的技术,它兼顾了水印的隐藏效果和抵抗攻击的能力,是数字版权保护和信息安全性领域的重要工具。通过巧妙地选择和调整DCT系数,NEC算法能够在不影响图像视觉质量的同时,有效地嵌入和保护水印信息。

优化这段代码#include <REGX52.H> #include "lcd1602.h" #include "send_IR.h" #include "notsend_IR.h" #include "keybored.h" #include "Delay.h" sbit IR_EN = P2^0; void Send_NEC_0() { NotSend_IR(19); Send_IR(19); } void Send_NEC_1() { NotSend_IR(60); Send_IR(19); } void send(unsigned char s1,unsigned char s2) { unsigned char temp,i; Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); temp = s1 & 0x001; for(i = 0;i<12;i++) { if(temp) { Send_NEC_1(); } else { Send_NEC_0(); } temp = temp>>1; } Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); temp = s2 & 0x001; for(i = 0;i<12;i++) { if(temp) { Send_NEC_1(); } else { Send_NEC_0(); } temp = temp>>1; } //????? Send_NEC_1(); Send_NEC_1(); Send_NEC_1(); Send_NEC_1(); } void Send1(unsigned char s1,unsigned char s2) { Send_IR(167); NotSend_IR(167); Send_IR(167); send(s1,s2); Send_IR(167); NotSend_IR(167); Send_IR(167); send(s1,s2); Send_IR(167); NotSend_IR(167); Send_IR(167); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); Send_NEC_1(); Send_NEC_0(); }

2023-05-30 上传