基于扩频的数字视频水印嵌入和检测算法matlab仿真

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

 

 

 

 

2.算法运行软件版本

matlab2022a

3.部分核心程序

.................................................................
for j =1:length(attens)jatten      = attens(j);%读取水印 msg0       = imresize(imread('bupt.bmp'),1);[row2,col2]= size(msg0);msg        = msg0(:);load mpeg2_toolbox\mpeg_avi.matMPEG2_I_frame       = MPEG2_avi{1};MPEG2_I_frame1      = imresize(MPEG2_I_frame,5);[row,col] = size(MPEG2_I_frame1);s_len     = row*col;%generate msg to be embeddedi=1;while floor(s_len/(row2*col2)) > 2^ii=i+1;endfrag    = 2^(i-1); msg_len = floor(s_len/frag);degree  = 5;%degree为m序列的级数pn0     = 2*pn_gen([degree,2,0],[zeros(1,degree-1),1],0)-1;pn1     = 2*pn_gen([degree,2,0],[zeros(1,degree-1),1],1)-1;for i = 1:1%读取视频MPEG2_I_frame       = MPEG2_avi{i};MPEG2_I_frame1      = imresize(MPEG2_I_frame,5);s         = MPEG2_I_frame1;[row,col] = size(MPEG2_I_frame1);s_len     = row*col;len       = row2*col2;%帧间运动检测,加入水印bld       = func_add_sy(frag,msg,len,s,atten,pn0,pn1);%进行攻击out0      = double(vedio_attack(bld,SEL));%提取水印out       = func_del_sy(frag,out0,len,pn0,pn1)';om        = Vector2Matrix(out,col2,1);
%         figure(1);
%         subplot(221);
%         imshow(MPEG2_I_frame1,[]);title('原始视频');
%         subplot(222);
%         imshow(msg0);title('水印');    
%         subplot(223);
%         imshow(bld,[]);title('原始视频加入水印');
%         subplot(224);   
%         imshow(om);title('提取水印');     %计算提取误差ERR1(j) =  1/mean(mean(abs(MPEG2_I_frame1-out0)));ERR2(j) =  mean(mean(abs(om-msg0)));PSNR(j) = psnr(MPEG2_I_frame1, out0);end
end
figure;
plot(attens,PSNR,'b');
grid on
xlabel('水印嵌入强度');
ylabel('视频质量');figure;
semilogx(attens,ERR1,'b');
grid on
xlabel('水印嵌入强度');
ylabel('视频质量');
%  PSNR = psnr(MPEG2_I_frame1, bld)figure;
semilogx(attens,ERR2,'b');
grid on
xlabel('攻击强度');
ylabel('水印嵌入强度');
%  PSNR = psnr(MPEG2_I_frame1, bld)if SEL==1save R1.mat attens ERR1 ERR2 PSNR
end
if SEL==2save R2.mat attens ERR1 ERR2 PSNR
end
if SEL==3save R3.mat attens ERR1 ERR2 PSNR
end
03_015m

4.算法理论概述

      在MPEG压缩标准中,数据流是以多路复合流的格式存储和传输的。多路复合流由音频流和视频流复合组成。多路复合流的基本单位时包,而一个包由三个组组成。组分为视频组和音频组,在此只介绍视频组。它采用分层的语法定义,每一层包括一个或多个从属层。

       由于视频流被分成多个图片组,每个组包含特征相近的一些图像帧的集合,帧又被分成画面,再分成宏块。画面内编码的基本单位是宏块,一个宏块由6个8*8像素块构成:四个亮度块Y0, Y1, Y2, Y3,一个色度块U,一个色度块V。注意,四个亮度块覆盖的画面区域与每个色度块覆盖的画面区域是相同的,原因是由于色度信息的信息量比亮度信息少,为了提高数据压缩率而对色度信息作了适合人类视觉系统灵敏度的亚采样。

      MPEG视频压缩编码的目的是为了在保持较好画面质量的同时获得较高的压缩比。由于在编码过程中不能保持精确的像素值,所以该算法是有失真的,视频压缩的最优性能依赖于高质t画面、高压缩比与数据流读取三者之间矛盾的折衷。

         原始视频信号的数据量非常大,不利于存储和传输,所以视频信号需要进行数据压缩。为了获得高压缩比,就必须有效的去掉视频在时域和空域上的冗余。MPEG-2采用基于块的运动补偿以减少时域冗余。运动补偿用于对当前画面作相对于前一幅画面的因果预测,对当前画面作相对于后一幅画面的非因果预测,或作相对于前、后画面的差补预测。对每一个8*8像素的画面区域均定义一个运动矢量,以保证能有效恢复画面。用DCT变换对差值信号(即预测误差)作进一步压缩,以消除空域冗余:然后以一个不可逆的过程对DCT系数量化,删去不太重要的信息;最后,将运动矢量与DCT信息结合,并用变长码进行嫡编码,得到压缩的视频流。

         在MPEG视频中,由于视频的I帧上色度的离散余弦变换DCT的直流系数DC是一个始终在视频流中存在而且很鲁棒的参数,我们将水印信息经m序列调制后加入到I帧的色度DCT的直流系数中,这样水印信息在不影响视频效果的情况下一般是难以去除的,所以鲁棒性是足够的,这里我们采用了扩频的方法,以方便有效的检测水印,另外有效的抵抗各种攻击及干扰。这里关键问题是色度DCT的直流系数DC是一个对于视觉系统很敏感的参数,我们在色度DCT的直流系数DC上加水印相当于对其加入微量干扰,必须使这种千扰低于一定的门限制,使得人眼的视觉系统对视频中色度的微小变化感觉不到,所以我们将根据直流系数的大小自适应的加上不同程度的水印,以提高数字水印检测率并且提高了视频的效果。下面分别给出水印嵌入和提取的算法:

       由于使用了伪随机序列调制水印,水印信号类似于白噪声,水印对未授杠来说是很难检测、定位、移除和处理的。图描述了扩频水印的嵌入过程。

       水印的提取通过把嵌入水印的视频流与相同懂得伪随机序列作相关运算,根据相关值的大小来判定水印的比特值。水印的提取框图如图所示。 

5.算法完整程序工程

OOOOO

OOO

O

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/94986.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生成国密密钥对

在线生成国密密钥对 生成的密钥对要妥善保管,丢失是无法找回的。

JVM——类的生命周期

文章目录 类加载过程加载验证准备解析初始化 卸载 一个类的完整生命周期如下: 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->…

Spring中Bean的生命周期以及Bean的单例与多例模式

一. Bean的生命周期 bean的生命周期可以表达为:bean的定义➡bean的初始化➡bean的使用➡bean的销毁 Bean的初始化过程 1)通过XML、Java annotation(注解)以及Java Configuration(配置类) 等方式加载Bea…

同步jenkinsfile流水线(sync-job)

环境 变量:env(环境变量:sit/dev/simulation/prod/all),job(job-name/all)目录:/var/lib/jenkins/jenkinsfile environment.json: [roottest-01 jenkinsfile]# cat env…

elementUI时间选择器el-time-picker的坑

//开始时间<el-time-pickerplaceholder"选择时间":format"HH:mm:ss" //显示的时间样式value-format"HH:mm:ss" //绑定值的样式 //不给默认为 Date 对象值&#xff1a;"2023-07-31T16:00:00.000Z"v-model"FormData.startTime&…

JavaWeb-Servlet服务连接器(终)

上一篇文章JavaWeb-Servlet服务连接器&#xff08;三&#xff09;_Alphamilk的博客-CSDN博客 目录 1.ServletContext通信 会话技术Cookie与Session 1.Cookie 2.Session 1.ServletContext通信 概念&#xff1a;代表了整个web应用&#xff0c;用于与服务器实现通信 可以通…

docker-php扩展

生成扩展骨架 环境&#xff1a;docker-compose、php74 1.本地要有一份 php-src git clone https://github.com/php/php-src.git cd php-src git checkout PHP-7.4.52.\www\php-src\ext可以看到有一个 ext_skel.php 文件 3.通过ext_skel.php脚本创建了一个hello扩展&#xf…

同步请求和异步请求

同步请求和异步请求是在网络编程中常用的两种通信模式&#xff0c;它们有以下区别&#xff1a; 同步请求&#xff1a; 在发送一个请求后&#xff0c;程序会一直等待服务器返回响应&#xff0c;期间无法进行其他操作。请求发出后&#xff0c;程序会阻塞在请求处&#xff0c;直…

变压器故障诊断(python代码,逻辑回归/SVM/KNN三种方法同时使用,有详细中文注释)

视频效果&#xff1a;变压器三种方法下故障诊断Python代码_哔哩哔哩_bilibili代码运行要求&#xff1a;tensorflow版本>2.4.0,Python>3.6.0即可&#xff0c;无需修改数据路径。 1.数据集介绍&#xff1a; 采集数据的设备照片 变压器在电力系统中扮演着非常重要的角色。…

【Spring源码】小白速通解析Spring源码,从0到1,持续更新!

Spring源码 参考资料 https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q bean工厂 DefaultListableBeanFactory&#xff08;最原始&#xff09; bean的生命周期 创建&#xff08;实例化&#xff09;–>依赖注入–>-初始化…

【数据结构】循环队列

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Java课题笔记~ 整合第三方技术

1. 整合JUnit 问题导入 回忆一下Spring整合JUnit的步骤&#xff1f; 1.1 Spring整合JUnit&#xff08;复习&#xff09; 1.2 SpringBoot整合JUnit 【第一步】添加整合junit起步依赖(可以直接勾选) <dependency><groupId>org.springframework.boot</groupId…

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.2 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url&#xff1a;http://localhost:8080/s…

如何运用小程序技术闭环运营链路?

如何通过线上小程序获取用户线索&#xff0c;提高企业抗风险能力&#xff0c;建立有效的营销数字化系统一直是困扰每一个小程序开发者与运营者的问题。 当我们选择使用小程序设计自己的运营流程时&#xff0c;从「推广」到「转化」&#xff0c;再到最终的「留存」都是运营过程…

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…

Qt应用开发(基础篇)——选项卡窗口 QTabWidget

一、前言 QTabWidget类继承于QWidget&#xff0c;是一个拥有选项卡的窗口部件。 QTabWidget类有一个选项卡栏QTabBar和一个页面区域&#xff0c;用来显示和选项卡相关联的界面。用户通过点击选项卡或者自定义快捷方式(ALTKey)切换页面。 二、QTabWidget类 1、count 该属…

文本挖掘 day5:文本挖掘与贝叶斯网络方法识别化学品安全风险因素

文本挖掘与贝叶斯网络方法识别化学品安全风险因素 1. Introduction现实意义理论意义提出方法&#xff0c;目标 2. 材料与方法2.1 数据集2.2 数据预处理2.3 关键字提取2.3.1 TF-IDF2.3.2 改进的BM25——BM25WBM25BM25W 2.3.3 关键词的产生(相关系数) 2.4 关联规则分析2.5 贝叶斯…

Pytorch源码搜索与分析

PyTorch的的代码主要由C10、ATen、torch三大部分组成的。其中&#xff1a; C10 C10&#xff0c;来自于Caffe Tensor Library的缩写。这里存放的都是最基础的Tensor库的代码&#xff0c;可以运行在服务端和移动端。PyTorch目前正在将代码从ATen/core目录下迁移到C10中。C10的代…

【Java 回忆录】Java全栈开发笔记文档

这里能学到什么&#xff1f; 实战代码文档一比一记录实战问题和解决方案涉及前端、后端、服务器、运维、测试各方面通过各方面的文档与代码&#xff0c;封装一套低代码开发平台直接开腾讯会议&#xff0c;实实在线一起分享技术问题核心以 Spring Boot 作为基础框架进行整合后期…

大数据Flink学习圣经:一本书实现大数据Flink自由

学习目标&#xff1a;三栖合一架构师 本文是《大数据Flink学习圣经》 V1版本&#xff0c;是 《尼恩 大数据 面试宝典》姊妹篇。 这里特别说明一下&#xff1a;《尼恩 大数据 面试宝典》5个专题 PDF 自首次发布以来&#xff0c; 已经汇集了 好几百题&#xff0c;大量的大厂面试…