基于扩频的数字视频水印嵌入和检测算法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.mzph.cn/news/33968.shtml

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

相关文章

OpenCV实例(八)车牌字符识别技术(三)汉字识别

车牌字符识别技术(三)汉字识别 1.代码实例2.遇到问题3.汉字识别代码实例 相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面: (1)字符笔画因切分误差导致非笔画或笔画流失。 (2…

安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)

目录 前言: 一,安装 1.1打开官网JetBrains: Essential tools for software developers and teams点击 Developer Tools,再点击 Intellij IDEA 2.点击下载​编辑 3.选择对应的版本,左边的 Ultimate 版本为旗舰版,需要…

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程,Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使…

MySQL数据库表的增删查改 - 进阶

一,数据库约束 1.1 约束对象 not null - 该列不能为空unique - 保证该列的每一行都不一样default - 规定没有给列赋值时的默认值(自定义)primary key - not null 和 unique 的结合,会给该列添加一个索引&#xff0…

中科亿海微浮点数转换定点数

引言 浮点数转换定点数是一种常见的数值转换技术,用于将浮点数表示转换为定点数表示。浮点数表示采用指数和尾数的形式,可以表示较大范围的数值,但存在精度有限的问题。而定点数表示则采用固定小数点位置的形式,具有固定的精度和范…

走进知识图谱(二)【世界知识图谱篇】知识表示的经典模型与平移模型及基于复杂关系建模的知识表示学习

上篇文章提到,该系列文章将主要围绕世界知识图谱和语言知识图谱这两大类知识图谱进行展开,并且提到知识图谱的主要研究包括了知识表示学习、知识自动获取和知识的推理与应用三大部分。今天主要介绍世界知识图谱的知识表示学习,其中包括经典的…

C语言 字符指针

1、介绍 概念: 字符指针,就是字符类型的指针,同整型指针,指针指向的元素表示整型一样,字符指针指向的元素表示的是字符。 假设: char ch a;char * pc &ch; pc 就是字符指针变量,字符指…

python num循环怎么从1开始

如何实现python for循环从1开始? range()函数的作用和用法: 编写一个从数值1开始的循环: 执行后得到的结果 其他注意事项

HCIA---动态路由---RIP协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 前言 一.动态路由 二.动态路由协议分类 IGP:内部网关协议 EGP:外部网关协议 三.RIP协议概述 RIP版本分类: RIP三要素: RIP…

【LeetCode】870 . 优势洗牌

870 . 优势洗牌 方法:贪心 思路 这道题的思想类似于 “田忌赛马” ,把 nums1 当成是田忌的马,nums2 当成是齐威王的马。 讨论田忌的下等马(nums1 的最小值): 如果它能比过齐威王的下等马(nums…

探讨uniapp的navigator 页面跳转问题

navigator 页面跳转。该组件类似HTML中的<a>组件&#xff0c;但只能跳转本地页面。目标页面必须在pages.json中注册。 "tabBar": {"color": "#7A7E83","selectedColor": "#3cc51f","borderStyle": "bl…

分布式学习最佳实践:从分布式系统的特征开始

正文   在延伸feature&#xff08;分布式系统需要考虑的特性&#xff09;的时候&#xff0c;我逐渐明白&#xff0c;这是因为要满足这些feature&#xff0c;才设计了很多协议与算法&#xff0c;也提出了一些理论。比如说&#xff0c;这是因为要解决去中心化副本的一致性问题&…

第三节:在WORD为应用主窗口下关闭EXCEL的操作(1)

【分享成果&#xff0c;随喜正能量】夏日里的遗憾&#xff0c;一定都会被秋风温柔化解。吃素不难&#xff0c;难于不肯捨贪口腹之心。若不贪口腹&#xff0c;有何吃素之不便乎。虽吃华素&#xff0c;不吃素日&#xff0c;亦须少吃。以一切物类&#xff0c;皆是贪生怕死&#xf…

【Linux】以太网协议——数据链路层

链路层解决的问题 IP拥有将数据跨网络从一台主机送到另一台主机的能力&#xff0c;但IP并不能保证每次都能够将数据可靠的送到对端主机&#xff0c;因此IP需要上层TCP为其提供可靠性保证&#xff0c;比如数据丢包后TCP可以让IP重新发送数据&#xff0c;最终在TCP提供的可靠性机…

【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 102. 二叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节…

记录一下Java实体转json字段顺序问题

特殊需求&#xff0c;和C交互他们那边要求字段顺序要和他们定义的一致(批框架) 如下&#xff1a; Data public class UserDto {private String name;private Integer age;private String addr; }未转换前打印&#xff1a; 转换后打印&#xff1a; 可以看到转换为json顺序打印…

SpringMVC 的基本概念(一)

1.1 关于三层架构和 MVC 1.1.1 三层架构 我们的开发架构一般都是基于两种形式&#xff0c;一种是 C/S 架构&#xff0c;也就是客户端 / 服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就 是浏览器服务器。在 JavaEE 开发中&#xff0c;几乎全都是基于 B/S 架构…

Windows 环境下 Python3 离线安装 cryptography 失败

发布Flask Web项目时&#xff0c;报错缺少Cryptography&#xff0c;于是尝试重新安装该库&#xff0c;但本机没有网络&#xff0c;只支持手动离线安装&#xff0c;尝试了pip、setup.py两种方式安装&#xff0c;结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…

计算机网络 网络层 IPv4地址

A类地址第一位固定0 B类10 其下同理