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

news2024/12/26 11:22:37

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

噪声测试

旋转测试

压缩测试

2.算法运行软件版本

matlab2022a

3.部分核心程序

.....................................................................................
DA{block_size}=bayer_dither(block_size);
for i=1:block_size:n
    for j=1:block_size:m
        temp=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)) ;
end

figure;
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.coloradmin.cn/o/1597444.html

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

相关文章

基于深度学习网络的鞋子种类识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load gnet.mat % 使用训练好的网络对验证数据进行分类预测 [Predicted_Label, Probability] c…

基于Canvas实现的简历编辑器

基于Canvas实现的简历编辑器 大概一个月前&#xff0c;我发现社区老是给我推荐Canvas相关的内容&#xff0c;比如很多 小游戏、流程图编辑器、图片编辑器 等等各种各样的项目&#xff0c;不知道是不是因为我某一天点击了相关内容触发了推荐机制&#xff0c;还是因为现在Canvas…

开源模型应用落地-chatglm3-6b-批量推理-入门篇(四)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

python将pdf转为docx

如何使用python实现将pdf文件转为docx文件 1.首先要安装pdf2docx库 pip install pdf2docx2.实现转换 from pdf2docx import Converterdef convert_pdf_to_docx(input_pdf, output_docx):# 创建一个PDF转换器对象pdf_converter Converter(input_pdf)# 将PDF转换为docx文件pdf…

解读MongoDB官方文档获取mongo7.0版本的安装步骤与基本使用

mongo式一款NOSQL数据库&#xff0c;用于存储非结构化数据&#xff0c;mongo是一种用于存储json的数据数据&#xff0c;可以通过mongo提供的命令解析json获取想要的值。 数据模型 了解关系数据库会很熟悉database,table,row,column的概念&#xff0c;分别是数据库&#xff0c…

leetcode代码记录(Z 字形变换

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a;…

开源模型应用落地-chatglm3-6b-gradio-入门篇(七)

一、前言 早前的文章&#xff0c;我们都是通过输入命令的方式来使用Chatglm3-6b模型。现在&#xff0c;我们可以通过使用gradio&#xff0c;通过一个界面与模型进行交互。这样做可以减少重复加载模型和修改代码的麻烦&#xff0c; 让我们更方便地体验模型的效果。 二、术语 2.…

使用 Fetch API 执行 GraphQL 查询和变体

GraphQL 简介 GraphQL 是从远程服务器查询数据的强大工具&#xff0c;也是我构建 API 的首选方式。对一些人来说&#xff0c;学习它可能有一定难度&#xff0c;因为教程通常使用 Apollo 或 Relay 等工具进行编写。 这些工具很不错&#xff0c;但通常更适用于复杂项目。在某些…

Python基于Django的微博热搜、微博舆论可视化系统

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

【TEE论文】IceClave: A Trusted Execution Environment for In-Storage Computing

摘要 使用现代固态硬盘&#xff08;SSD&#xff09;的存储中计算使开发人员能够将程序从主机转移到SSD上。这被证明是缓解I/O瓶颈的有效方法。为了促进存储中计算&#xff0c;已经提出了许多框架。然而&#xff0c;其中很少有框架将存储中的安全性作为首要任务。具体而言&…

WPS二次开发系列:WPS SDk功能就概览

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 作者通过深度测试使用了WPS SDK提供的Demo&#xff0…

比特币突然暴跌

作者&#xff1a;秦晋 周末愉快。 今天给大家分享两则比特币新闻&#xff0c;也是两个数据。一则是因为中东地缘政治升温&#xff0c;传统资本市场的风险情绪蔓延至加密市场&#xff0c;引发加密市场暴跌。比特币跌至66000美元下方。杠杆清算金额高达8.5亿美元。 二则是&#x…

代码随想录Day41:动态规划Part3

Leetcode 343. 整数拆分 讲解前&#xff1a; 毫无头绪 讲解后&#xff1a; 这道题的动态思路一开始很不容易想出来&#xff0c;虽然dp数组的定义如果知道是动态规划的话估摸着可以想出来那就是很straight forward dp定义&#xff1a;一维数组dp[i], i 代表整数的值&#xf…

蓝桥杯 — — 纯质数

纯质数 题目&#xff1a; 思路&#xff1a; 一个最简单的思路就是枚举出所有的质数&#xff0c;然后再判断这个质数是否是一个纯质数。 枚举出所有的质数&#xff1a; 可以使用常规的暴力求解法&#xff0c;其时间复杂度为&#xff08; O ( N N ) O(N\sqrt{N}) O(NN ​)&…

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

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

相机系列——透视投影:针孔相机模型

作者&#xff1a;木一 引言 上文我们提到&#xff0c;三维相机是对真实世界成像的模拟&#xff0c;为了让三维物体在计算机屏幕上呈现出来的图像符合人眼观察效果&#xff0c;通常采用透视投影方式模拟相机成像&#xff0c;为了简化计算&#xff0c;可以用针孔相机模型来描述…

设计模式——观察者模式17

观察者模式指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式。 中介者模式是N对N的双向关系。观察者模式是1对N的单向关系。 设计模式&#xff0c;一定要敲代码…

STC89C52学习笔记(十三)

STC89C52学习笔记&#xff08;十三&#xff09; 综述&#xff1a;本文讲述了红外调控的原理和通信以及外部中断相关知识。 一、红外调控 1、定义 红外遥控是利用红光进行通信的设备。 2、特点 ①由红LED将调制后的信号发出&#xff0c;由专门的红外接收头进行解调输出。 …

​​​​网络编程探索系列之——广播原理剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之广播原理剖析&#xff0c;在这篇文章中&#xff0c; 你将会学习到如何在网络编程中利用广播来与局域网内加入某个特定广播组的主机&#xff01; 希望这篇文章能对你有所帮助&#xff0c;大家要是觉得我写…

jupyter使用虚拟环境里的依赖配置

进入虚拟环境fourier-features-pytorchconda activate fourier-features-pytorch 安装ipykernel pip install ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simple将核与虚拟环境匹配 python -m ipykernel install --user --namefourier-features-pytorch打开jupyter j…