⛄一、DCT数字水印简介

1 前言
随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显提升。数字化也可以实现信息存储的便利性,同时数字信息也能方便和快速地通过电子设备进行传输。因此,数字交换传输过程越来越简易。

这样的便利固然舒适,但是伴随的副作用也快速被发现,急切需要一种技术对密码学进行补充。现如今网络中时常出现的产权问题也被得到了重视。数字水印技术的出现大大缓解了这一情况,如若内容被进行了解密处理,这种新的信息技术仍能发挥它的效用,继续起到对信息的保护作用。

2 数字水印算法的基本要求
2.1 数字水印的定义

数字水印技术进行工作的前提是,原始载体不能受到影响。默默保护信息不被打扰不被发现是它的优势。所谓的数字水印是需要在载体文件中镶嵌一些保护信息,数字化的图像、影像、文字都是载体文件。也可以这样认为,数字水印是采用扩频通信手段在宽窄信道之间传输的一种水印信号。使用者可以通过识别载体文件中的保护信息来推断初始信息有没有被篡改,还可以从中得到其中的隐含信息。因此可以将水印信号表示为:

我们能够利用序列来表示水印信息,简单和复杂的水印信号都有对应序列;其中一维和二维序列表示较为简单的水印信号,三维或者多维的数组来表示比较复杂的水印信号。在式中A表示整个公式的一个取值范围、M表示水印信号的长度。水印信息一样也可以使用数组来表示,数组的维数的多少代表信息的复杂程度,一般一维序列是用来表示音频文件的;如果载体是图像,那对应的水印就是二维数组;载体是动画,相应的水印就是三维信号。

2.2 数字水印技术有以下四个方面的特点:
(1)安全性

信息一定是需要安全来保证的,不管在任何应用领域中,这都会是最重要的需求之一。而数字水印不仅能够保证信息的安全还能保障信息不被篡改和伪造。信息的安全不仅体现在不被偷窃还体现在误检测率要较低。数字水印的信息应该随着初始内容的改变而实时变化;数字水印的安全性越强则抵抗性越强。

(2)隐蔽性

数据在符合规则的使用情况下,不会使原本的保护的文字、图像、音频等得到降质,保证质量同时还很难被察觉,具有不可察觉的优势。

(3)鲁棒性

经过多次信号处理或者攻击之后,水印信息中的数据不被破坏,且识别结果也不会发生偏差,图像很容易被攻击就很容易将信息泄露。平移、旋转、剪切、滤波、量化、采样、转换等都是信号的处理过程。数字水印是将一些不能被看见的信息嵌入到内容数据中,通常情况下是使用在版权保护中,或者用于保护内容数据的完整性。这也是数字水印保证信息不被篡改的方式。这样可以掩盖原本的信息将现有信息进入到破坏者眼中,从而造成干扰。

(4)水印容量

考虑到整个通信领域对于隐蔽性的要求偏高,并且需求不断增长,所以数字水印的水印容量也根据该情况做出了相应的调整。在此调整的基础上,水印容量也需要加强自身的能力,将自己承载信息的能力变强,只有这样才能将图像中所需要的信息都嵌入都水印中。正是因为通信领域的独特性,数字水印在这方面的努力也使得数字水印在这个领域中非常受欢迎,并且水印容量中所承载的信息能够将初始图像的所有信息都标明。版权纠纷就是因为所属者标识不清晰才会产生,这种做法可以尽可能防止这种纠纷的发生,还能够保护数字产权合法拥有者的合法权益。

数字水印具有以上四个基本特征。正是由于数字水印有安全性、隐蔽性、鲁棒性和数字水印这些特征,才在各式各样的水印设计方案中得到最优解。一个理想的水印算法不但需要高隐蔽性,还需要有强抵御力来面对各种攻击。优秀的数字水印方案需要结合以上四点做出理性的选择,只有充分考虑到这四个特征才能在设计水印方案的时候完美切合实际需求。

2.3 DCT变换的数字水印的应用
DCT变换域算法在抵抗有损压缩编码和其他一些具有信号失真的数据处理过程有很好的表现,鲁棒性和不可感知性是难以同时满足的两个要求,但是基于DCT变换的数字水印算法能更好地满足这两个基本要求。针对DCT变换的数字水印算法,在下文中会进行详细解释。并对版权保护问题中利用DCT变换所需的方法及步骤做出介绍。

3 离散余弦变换(DCT)算法介绍
3.1 傅里叶变换紧密相关的数学运算是离散余弦变换

DCT变换的基础是傅里叶变换,图像信号需要通过二维数组的变换来实现。

反离散余弦变换IDCT坐标公式:

其中:

3.2 DCT域系数分析
根据上式的计算方法可以得到64个系数,左上方位置的式直流分量(DC分量)。去除左上角的位置坐标的其他坐标系数都称为交流分量(AC分量)。只要加入大量的水印信息都不会使得水印之后的图像与初始图像对比之后在视觉上都不会产生较大差别,此时的感觉容量即为最大,这个位置也是最适合在这64个DCT系统中添加水印信息的位置,同时还能够确保在经过恶意攻击之后,图像依旧可以完整的提取水印信息。鲁棒性较高的区域刚好位于人们视觉敏感区域,此时的信号在信息处理过程中很难被除掉。

4 基于DCT变换技术的数字水印算法的应用步骤
对于彩色图片,基本DCT算法的流程是,首先将RGB图片转成YUV格式,然后再将图像矩阵分成互不重叠的8*8块,DCT模块对其中的Y分量,而后经YUV2 RGB输出嵌入后的RGB流。流程图如图1。

图1 水印算法流程图
具体嵌入方法为:读取水印信息w(这里w取1或-1),按公式更改s系数的值,其中T是选定的阈值。数字水印是将一些不能被看见的信息嵌入到内容数据中,通常情况下是可以护内容数据的完整性。

扩频原理的叠加使用,是水印技术保证并升级DCT算法的可靠性的优质方案,用来满足数字水印设计方案的需求。DCT变换的最佳独特之处就在于,普通的信息只能将块状的信息汇聚在少量的低频DCT系数中,如此仅少量系数可以变换,还不会对图像的质量有危害。当分块的运算出现时,使得图像嵌入更为简易。因此DCT变换在低频中更适用,高频编码是容易被各种处理方法破坏使用,不被使用。扩频技术实现起来还是比较简单的,目前人们正在研究的数字水印算法更多的是基于变换域的,而这些变换域主要以频域为主,在空域算法方面,弥补了不足。

图2 原图与嵌入水印后的图像

5 水印的提取
当水印信息嵌入到图像之后,需要通过DCT变换等比较系统的方式将水印提取出来。
(1)基于DCT变换对含水印信息的数字作品进行变换。
(2)最佳嵌入区域需要根据嵌入算法来找到嵌入区域。
(3)按照水印嵌入时的基本规则将二元数组和三元数组两者的数值对比之后,就可以确定水印信息值了。
(4)将确定的水印信息值经过变换之后就可得到提取出的水印信息。

6 DCT水印攻击实验分析
从直观的角度观察水印的感知透明度就是DCT水印的攻击测试。
(1)本次分析主要对图像嵌入水印序列,之后再对已经加入水印的图像进行水印的提取。通过实验可以得出基于DCT变换后的数字水印算法的透明性有明显改善。
(2)以恶意攻击实验的方式,来验证数字水印算法在数字媒体当中的作用。能否使得版权信息得到保护;能不能快速并且有效的将信息提取出来;嵌入的水印经过攻击后是否可以完整的提取。

⛄二、部分源代码

function varargout = main(varargin)
% MAIN MATLAB code for main.fig
% MAIN, by itself, creates a new MAIN or raises the existing
% singleton*.
%
% H = MAIN returns the handle to a new MAIN or the handle to
% the existing singleton*.
%
% MAIN(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in MAIN.M with the given input arguments.
%
% MAIN(‘Property’,‘Value’,…) creates a new MAIN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before main_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to main_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help main

% Last Modified by GUIDE v2.5 212-May-2022 10:42:15

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @main_OpeningFcn, …
‘gui_OutputFcn’, @main_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to main (see VARARGIN)

% Choose default command line output for main
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% --------------------------------------------------------------------
function Untitled_1_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------
function Untitled_7_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------
function Untitled_8_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% open ‘help.txt’;
winopen(‘help.txt’);

% --------------------------------------------------------------------
function Untitled_9_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
msgbox(’ ');

% --------------------------------------------------------------------
function Untitled_2_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(gcf);
run(‘bmp’);

% --------------------------------------------------------------------
function Untitled_3_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(gcf);
run(‘jpg’);
% --------------------------------------------------------------------
function Untitled_5_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

close(gcf);
run(‘wav’);
% --------------------------------------------------------------------
function Untitled_6_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(gcf);
run(‘yuv’);
% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc;
clear;
fclose(‘all’);
close(‘gcf’);

⛄三、运行结果




⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]王玉莹,关虎,黄樱,张树武,牛保宁.DWT-DCT联合变换域上的文本图像水印方案[J].计算机工程与设计. 2020,41(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【多种隐写】LSB+DCT文本图片嵌入+提取【含GUI Matlab源码 1851期】相关推荐

  1. 【图像隐写】DCT文本嵌入+提取【含GUI Matlab源码 1850期】

    ⛄一.DCT数字水印简介 1 前言 随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显 ...

  2. 【图像隐写】DWT+DCT+PBFO改进图像水印隐藏提取【含GUI Matlab源码 081期】

    ⛄一.DCT数字水印嵌入与提取简介 1 基本DCT变换 目前,基于DCT域的水印方法已经成为数字水印算法研究的热点,它的核心思想就是通过离散傅立叶变换对图像块进行处理后,再选择变换域中的一些系数值依据 ...

  3. 【图像压缩】DCT图像无损压缩【含GUI Matlab源码 726期】

    ⛄一.DCT图像无损压缩简介 1 图像压缩 图像压缩按照压缩过程中是否有信息的损失以及解压后与原始图像是否有误差可以分为无损压缩和有损压缩两大类.无损压缩是指不损失图像质量的压缩,它是对文件的存储方式 ...

  4. 【图像压缩】DCT图像压缩(压缩率可调)【含GUI Matlab源码 1049期】

    ⛄一.DCT图像无损压缩简介 1 图像压缩 图像压缩按照压缩过程中是否有信息的损失以及解压后与原始图像是否有误差可以分为无损压缩和有损压缩两大类.无损压缩是指不损失图像质量的压缩,它是对文件的存储方式 ...

  5. 【手写数字识别】RBM神经网络手写数字识别【含GUI Matlab源码 1109期】

    ⛄一.手写数字识别技术简介 1 案例背景 手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性.由于手写体数字的随意性很大,如笔画粗细.字体大小. ...

  6. 【数字水印】基于matlab DFT数字水印嵌入提取攻击【含Matlab源码 2320期】

    ⛄一.DFT数字水印简介 1 引言 近几年来,数字水印技术研究取得了很大进展,陆续提出了诸如空域.变换域.压缩域.基于统计学.基于生理模型等多种数字水印算法[1].其中DFT变换域水印算法的研究大多利 ...

  7. 【图像隐写】基于matlab LSB数字水印嵌入提取【含Matlab源码 2412期】

    ⛄一.DCT数字水印简介 1 前言 随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显 ...

  8. 【语音隐写】基于matlab GUI DCT音频数字水印嵌入提取【含Matlab源码 837期】

    一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值.通 ...

  9. 【语音隐写】基小波变换算法求解水印嵌入提取【含Matlab源码 513期】

    ⛄一.简介 随着计算机和网络的飞速发展,人们的许多创作和成果都以数字形式进行存储和发布.然而,数字作品极易被非法拷贝.伪造和窜改,使得很多版权所有者不愿意利用网络公开其作品,从而阻碍其自身发展.目前, ...

最新文章

  1. 程序员新手 0年份等级 指导(一) 开发人员IT架构总览
  2. JVM笔记6-垃圾回收器
  3. 程序员数学基础【二、时间复杂度】(Python版本)
  4. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
  5. Sharepoint java sdk_java – 使用JAX-WS将文件保存到Sharepoint服务器
  6. Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容
  7. “约见”面试官系列之常见面试题第三十五篇之轮循机制(建议收藏)
  8. php 读写excel 网络错误,谁用过PHPExcel,导出的文件报“无法读取的内容”错误
  9. Pytorch——Tensor合并+截取+拼接
  10. linux qt 触摸屏事件,利用触摸屏获取事件坐标
  11. 消息中间件activemq-5.13.0安全验证配置
  12. 探讨OSPF次优路由选择
  13. JAVA模拟学生选课系统(附下载链接)
  14. 呼叫压力测试软件,MyComm呼叫中心压力测试解决方案
  15. java web调用海康威视摄像头
  16. 远程过程调用失败而且未执行怎么办
  17. 中外文献图书网址汇总
  18. layui后台首页关闭标签
  19. 【身份证识别】形态学二代身份证号码识别系统【含GUI源码 948期】
  20. STM32F103 SX1278 驱动

热门文章

  1. stm32三相逆变程序,pcb,以及板子。stm32输出三相spwm波驱动6个mos管实现三相逆变
  2. html排版标记应用,HTML的排版标记_html
  3. 手机巨人诺基亚为何会倒下
  4. Zortrax社区 教您用3D打印 玩转 角色扮演面具
  5. 计算机保存新建文件夹,新建、保存、打开工程文档
  6. python爬取有道词典json报错,求帮助!
  7. 【实现】Vue用户管理页面
  8. 论文解读:Dynamic Connected Networks for Chinese Spelling Check
  9. plcsim_advanced与modbus_poll仿真
  10. 【matlab测试与修正】考虑源荷两侧不确定性的含风电电力系统低碳调度