基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

噪声测试

旋转测试

压缩测试

2.算法运行软件版本

matlab2022a

3.部分核心程序

.....................................................................................
DA{block_size}=bayer_dither(block_size);
for i=1:block_size:nfor j=1:block_size:mtemp=X1(i:i+block_size-1,j:j+block_size-1);Bmax=max(max(temp));   Bmin=min(min(temp));k=Bmax-Bmin;DAk=DA{block_size}.*(k/(block_size^2-1));Th=DAk+Bmin;Xbinary=(temp>=Th);        n1=ceil(i/block_size); m1=ceil(j/block_size);low_high((n1-1)*(m/block_size)+m1,1)=Bmin;   low_high((n1-1)*(m/block_size)+m1,2)=Bmax;  binary(i:i+block_size-1,j:j+block_size-1)=Xbinary;end
end
%在编码后的位平面中嵌入水印信息
%设置嵌入强度
Power     = 80;  
%设置块的大小RR        = 45;
CC        = 45;
Mwk_binary= func_insert(binary,Imark,Power,RR,CC);%噪声攻击
Mwk_binary= uint8(awgn(double(Mwk_binary),NOISE(jj),'measured'));[Imark,Mwk_binarys] = func_desert(Mwk_binary,RR,CC,4);figure(1);
subplot(122);
imshow(Imark,[]);
title('提取水印');binary = Mwk_binarys;
[n,m]  = size(binary);
[l,h]  = size(low_high);
gray   = zeros(n,m);
block_size =(n*m/l)^0.5;Imark0=imresize(Imark0,[45,45]);
PSNR(jj) = func_psnr((Imark0),(Imark));
NC(jj)   = func_nc((Imark0),(Imark)) ;
endfigure;
plot(NOISE,PSNR,'b-o');
grid on
xlabel('noise');
ylabel('PSNR');figure;
plot(NOISE,NC,'b-o');
grid on
xlabel('noise');
ylabel('NC');
011_003m

4.算法理论概述

       有序抖动块截断编码(Dithered Ordered Dithering with Truncation Coding, 简称DOTC)是一种在数字图像中嵌入水印信息的方法,该方法结合了抖动技术和量化误差隐藏原理,在保持视觉质量的同时,增强了水印的鲁棒性和隐蔽性。

步骤1,为增强系统鲁棒性和安全性,在水印嵌入前,先由秘钥key利用伪随机数发生器生成伪随机序列与水印图像进行异或计算以得到,调制水印序列Wd并嵌入宿主图像中。

Wd={Wd(ij)|Wd(i,j)=0或1,0<= i <=I1-1,  0<= j<=I2-1 }

步骤2,将原图像分为为N*N大小的无重叠块,对各子块采用ODBTC编码以实现分块区域内图像的二值化,并对重建电平做出如下处理。

1,若连续两个比特的嵌入水印信号为00,则将两重建电平u1,u2均量化为偶数。

2,若是连续两个比特的水印信号为01,则将重建电平u1量化为偶数,而将u2量化为奇数。

3,若连续两个比特的水印信号为为10,则将重建电平u1量化为奇数,而将u2量化为偶数。

4,若连续两个比特的水印信号为11,则将重建电平u1,u2均量化为奇数。

步骤3,用经步骤二处理后得到的重建电平,对原图像进行译码。

步骤4,不断重复步骤2和步骤3,直到原图像所有子块都已经被处理完或者水印信号嵌入完毕,即可得到含水印图像Lw。  

(2),水印的提取。

水印的提取过程是水印嵌入的逆过程,具体描述如下。

输入:大小为大小为I1*I2的含水印图像Lw,水印大小为w1*w2,密钥key(伪随机数发生器种子)

输出:大小为w1*w2的水印图像。

步骤1,将待验证图像分为N*N大小的无重叠块,对各子块进行ODBTC编码,于是,根据重建电平的奇偶性即可恢复出各子块中隐藏的水印比特。

1,若重建电平的u1,u2为偶数,则提取出的水印信号00;

2,若重建电平的u1为偶数,u2为奇数,则提取出的水印信号为01;

3,若重建电平的u1为奇数,u2为偶数则提取出的水印信号为10;

4,若重建电平的u1,u2均为奇数,则提取出的水印信号为11。

步骤2,不断重复步骤1,直到图像中所有子块都处理完,或者水印信号已经提取完毕。恢复出对置乱水印序列Wd’。

步骤3,由密钥匙key对利用伪随机数发生器生成伪随机序列,对水印序列Wd’进行解调制,进而将原水印序列W’={W’(i,j)|W’(i,j)=0,1,0<= i<=m-1,0<= j<=m-1}

完成水印提取。

5.算法完整程序工程

OOOOO

OOO

O

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

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

相关文章

STM32—外部中断_按键控制 LED

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c exti.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 开发板介绍 相关笔记 此笔记基于朗峰 STM32F103 系列全集成开发板的记录 1 、 电路构成及原理图 外部中断---EXTI EXTI&#xff08;External…

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a&#xff0c;如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0&#xff0c;则beauty。其中 i &…

BEVFormer代码阅读

1. 代码地址 https://github.com/fundamentalvision/BEVFormer 2. 代码结构 个人理解&#xff0c;代码库中的代码与两篇论文都略有不同&#xff0c;总结起来&#xff0c;其结构如下。 3. BEVFormer 的 Pipeline 根据自己调试算法模型以及对论文的理解&#xff0c;我这里将 …

牛客网刷题 :BC50 你是天才吗

描述 据说智商140以上者称为天才&#xff0c;KiKi想知道他自己是不是天才&#xff0c;请帮他编程判断。输入一个整数表示一个人的智商&#xff0c;如果大于等于140&#xff0c;则表明他是一个天才&#xff0c;输出“Genius”。 输入描述&#xff1a; 多组输入&#xff0c;每…

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏&#xff0c;以获得最佳的游戏体验。不同的游戏和平…

音视频、网络带宽等常用概念详解

1.aac音频参数解释 AAC帧大小为1024个sample&#xff1a;指AAC编码一般以1024个采样为一个音频帧。 采样率48khz&#xff1a;指1秒&#xff08;即1000毫秒&#xff09;采集48000次。 计算1秒有多少帧&#xff1a;48000 / 1024 46.875 a&#xff08;用a表示计算结果&#xff0…

vite - WebAssembly入门

1. 初始化 vite 项目 1.1 安装 nvm&#xff08;可选&#xff09; brew update brew install nvm在 ~/.zshrc 添加 export NVM_DIR~/.nvm source $(brew --prefix nvm)/nvm.sh执行如下命令 source ~/.zshrc1.2 安装 node nvm install nodenvm ls -> …

PyTorch Scheduler动态调整学习率

文章目录 PyTorch动态调整学习率1.使用官方scheduler2.自定义scheduler参考 PyTorch动态调整学习率 深度学习中长久以来一直存在一个令人困扰的问题&#xff0c;那就是如何选择适当的学习率。如果学习速率设置得过小&#xff0c;会导致模型收敛速度缓慢&#xff0c;训练时间延…

vscode 打代码光标特效

vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…

Day13-C++基础之文件操作

文件操作 #include<iostream> #include<fstream> #include<string> using namespace std; ​ class Person{ public:char m_Name[64];int m_Age; }; ​ int main(){//文本文件操作 ​//写文件//1.包含头文件 fstream//2.创建流对象ofstream ofs;//3.指定打开…

如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表 在日常的业务场景中&#xff0c;经常遇到需要在数据库中处理外部数据的情况&#xff0c;这些数据可能来源于应用程序&#xff0c;或者是其他业务系统。一般来说&#xff0c;常是通过ETL工具将外部数据库的数据导入到数据库内部的表中&#xff0c;再进行分析…

EasyRecovery数据恢复软件好不好用?值不值得下载

EasyRecovery数据恢复软件是一款专业且功能强大的数据恢复工具&#xff0c;它旨在帮助用户从各种存储设备中恢复由于各种原因&#xff08;如误删除、格式化、病毒攻击、系统崩溃等&#xff09;导致丢失的数据。这款软件支持多种存储介质&#xff0c;包括但不限于硬盘驱动器、U盘…

分布式监控平台---Zabbix

一、Zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个…

go结构体嵌套递归调用的2种方式--struct和func

1: 需要嵌套部分是结构体类型的&#xff0c;例如&#xff1a;快照 套 子快照&#xff0c;但是子快照长得和快照一样&#xff08;同一份结构体&#xff09;&#xff0c;可以无限递归套娃&#x1fa86; // ResRootSnapshot ... type ResRootSnapshot struct {// 快照标识Urn str…

Java实现单点登录(SSO)详解:从理论到实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

【Maven工具】

maven Maven是一个主要用于Java项目的构建自动化工具。它有助于管理构建过程&#xff0c;包括编译源代码、运行测试、将编译后的代码打包成JAR文件以及管理依赖项。Maven使用项目对象模型&#xff08;POM&#xff09;文件来描述项目配置和依赖关系。 Maven通过提供标准的项目…

(三)C++自制植物大战僵尸游戏项目结构说明

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、项目结构 打开项目后&#xff0c;在解决方案管理器中有五个项目&#xff0c;分别是libbox2d、libcocos2d、librecast、libSpine、PlantsVsZombies五个项目&#xff0c;除PlantsVsZombies外&#xff0c;其他四个…

第十五届蓝桥杯研究生组Java软件开发组总结

2024年十五届蓝桥杯研究生组 今年的题较去年难度降低了很多&#xff0c;题量也少了2道。 Q1 劲舞团 读文件&#xff0c;找到最长的满足条件的子数组的长度 答案是&#xff1a;9 BufferedReader&#xff0c;fopen&#xff0c;open Q2 召唤数学精灵 找规律&#xff0c;周期…

SELinux详解

SELinux是一种安全增强的Linux操作系统的安全子系统。它是由美国国家安全局&#xff08;NSA&#xff09;与Red Hat公司合作开发的&#xff0c;旨在提供高级的访问控制和强制访问控制&#xff08;MAC&#xff09;机制。 SELinux的目标是通过在操作系统内核中实施强大的访问控制…

【算法】快速排序的基本思想、优化 | 挖坑填补法和区间分割法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…