基于遗传优化的SVD水印嵌入提取算法matlab仿真

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

5.完整程序


1.程序功能描述

        基于遗传优化的的SVD水印嵌入提取算法。对比遗传优化前后SVD水印提取性能,并分析不同干扰情况下水印提取效果。

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

SVD

GA优化SVD

性能对比:

3.核心程序

....................................................................
% 遍历遗传算法返回的各代最优个体(从第二个开始,跳过第一个)
for i = 2:npop% 使用当前个体对应的步长参数进行SVD嵌入水印step_size = a(i);Wimg = func_svd_embeded(I0, Iwat, step_size);% 计算插入水印后图像的峰值信噪比(PEAKSNR)[m, n] = size(I0);error = I0 - Iatt;MSE = (sum(sum(error .^ 2))) / (m * n);if (MSE > 0)peaksnr = 10 * log10(255^2 / MSE);elsepeaksnr = 99;end% 从攻击后图像中提取水印wimg = func_svd_extract(Iatt, step_size);% 存储原始水印图像,用于后续计算归一化相关系数orig_Iwat = Iwat;% 计算归一化相关系数(NC)作为目标函数值norm_cor = corr2(orig_Iwat, wimg);% 计算目标函数值(归一化相关系数)obfunc = norm_cor;% 更新最大目标函数值、最佳步长、PEAKSNR和NC,以及最终图像if (obfunc > max)max = obfunc;step = step_size;peaksnr_value = peaksnr;NC = norm_cor;final_image = Iatt; % 存储最佳攻击后图像end
end
[peaksnr_value,NC]
peaksnr2(ij,kk)  = peaksnr_value;
norm_cor2(ij,kk) = NC;
end
endfigure;
subplot(121);
plot(NB,mean(peaksnr2,2),'b-o');
xlabel('噪声大小');
ylabel('图像PSNR');subplot(122);
plot(NB,mean(norm_cor2,2),'b-o');
xlabel('噪声大小');
ylabel('提取水印NC');save R2.mat NB peaksnr2 norm_cor2
37

4.本算法原理

       遗传优化是一种基于自然选择和遗传机制的全局优化算法,其在图像水印嵌入与提取领域中有着广泛应用。特别是在SVD( Singular Value Decomposition,奇异值分解)水印算法中,遗传优化能有效地寻找到最佳的水印嵌入参数,以提高水印的鲁棒性和隐蔽性。

SVD水印嵌入:给定一幅待嵌入水印的宿主图像 I,通过奇异值分解将其分解为 I=UΣVT。在选定的奇异值子集上添加水印信息(通常以量化形式表示),然后重构图像得到嵌入水印后的图像 Iw​=U(Σ+W)VT,其中 W 为水印信息在奇异值上的映射。

遗传优化:以种群(一组候选解)为基础,通过模拟自然选择、交叉和变异等生物进化过程,逐步优化水印嵌入参数(如嵌入层选择、量化步长、水印强度等),以最大化水印的鲁棒性或隐蔽性。

遗传算法流程

  1. 初始化:设置遗传算法参数(种群大小、迭代次数、交叉概率、变异概率等),随机生成初始种群,每个个体代表一组水印嵌入参数。

  2. 适应度评估:计算种群中每个个体的鲁棒性得分FR​(θ) 和隐蔽性得分 FH​(θ),根据实际需求选择合适的评价指标(如加权和、折衷函数等)。

  3. 选择:根据适应度得分进行选择操作,保留优秀个体进入下一代种群,常用的策略有轮盘赌选择、tournament选择等。

  4. 交叉:对选定的个体进行交叉操作,生成新的子代个体。常见的交叉方法有单点交叉、两点交叉、均匀交叉等。

  5. 变异:以一定概率对子代个体的某些参数进行变异,打破遗传过程中的局部最优,增加种群多样性。常用变异操作包括二进制变异、实数域均匀变异、高斯变异等。

  6. 更新:将交叉和变异产生的子代个体加入下一代种群,替换掉被淘汰的个体。

  7. 迭代:若达到最大迭代次数或收敛条件满足,则停止;否则,返回步骤2继续下一轮迭代。

  8. 最优解选取:从最终种群中选择适应度最高的个体作为最佳水印嵌入参数。

5.完整程序

VVV

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

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

相关文章

Set及其实现类与常用方法

1.Set及其常用实现类 Set接口是java.util.Collection接口的子接口.用来存储一个一个的数据.后面学习到的Map接口则用来存储key-value键值对. Set : 存储无序的,不可重复的数据|----->HashSet : 主要实现类 : 底层使用的是HashMap,即使用数组单向链表红黑树来存储。|-----&…

[C语言]——柔性数组

目录 一.柔性数组的特点 二.柔性数组的使用 三.柔性数组的优势 C99中,结构体中的最后⼀个元素允许是未知大小的数组,这就叫做『柔性数组』成员。 typedef struct st_type //typedef可以不写 { int i;int a[0];//柔性数组成员 }type_a; 有些编译器会…

机器学习模型——K—Means算法

目录 无监督学习概念: 有监督学习与无监督学习: 无监督学习 - 聚类分析 : 聚类算法应用场景: 常用聚类算法介绍: 对不同的聚类算法应用选择原则: 基于原型聚类: K-Means聚类算法概念及步…

访问网站时你的电脑都做了什么

电脑在访问百度时 首先在本地hosts文件里面查看本地有无域名对应的IP地址,若有就直接返回。若无,则本地DNS服务器当DNS的客户,向其它根域服务器发送报文查询IP地址,简单来说就是帮助主机查找IP,所以递归查询就在客户端…

秋招复习笔记——八股文部分:操作系统

笔试得刷算法题,那面试就离不开八股文,所以特地对着小林coding的图解八股文系列记一下笔记。 这一篇笔记是图解系统的内容。 硬件结构 CPU执行程序 计算机基本结构为 5 个部分,分别是运算器、控制器、存储器、输入设备、输出设备&#xf…

Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo

概述 本文探讨 Wails 框架的使用,从搭建环境到开发,再到最终的构建打包,本项目源码 GitHub 地址:https://github.com/mazeyqian/go-run-wechat-demo 前言 Wails 是一个跨平台桌面应用开发框架,他允许开发者利用 Go …

5.网络编程-socker(golang版)

目录 一、什么是socket? 二、Golang中使用TCP TCP服务端 TCP客户端​​​​​​​ 三、TCP黏包,拆包 1.什么是粘包,拆包? 2.为什么UDP没有粘包,拆包? 3.粘包拆包发生场景 4.TCP黏包 黏包服务端 …

抖音变现项目有哪些?来这几个资源网站看看吧

做短视频就像是在做一道菜,你得有那么几个秘密武器,才能让你的作品从众多视频中脱颖而出。我这个视频剪辑界的“烹饪大师”,今天就来给大家分享一下我的厨房秘籍——那些让我视频大放异彩的素材网站。九才素材网: 说起九才素材网…

javaScript中原型链

一、原型链 js 的对象分为普通对象和函数对象。每个对象都有__proto__ 但是只有函数对象 (非箭头函数) 才有 prototype 属性。 new的过程: 1、创建一个空的简单 javaScript对象 2、将空对象的 __proto__连接到该函数的 prototype 3、将函数的this指向新创建的对象…

物联网网关

TopLink 是图扑物联专为针对工业物联网边缘侧应用场景打造的一款部署在本地近场环境、以高性能计算机为载体、与云端协同的一体化计算服务产品。具备工业协议解析、数据采集和转发、本地监控、本地场景联动等核心功能,具有跨平台、易使用等特点。 TopLink还默认适配…

小白水平理解面试经典题目1431. Kids With the Greatest Number of Candies【Array类】

个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 1431. 拥有最多糖果的孩子 小白渣翻译 一…

qt样式表及qss文件的使用

三种设置样式表的方法: 1.使用ui文件,选中具体右键样式表输入即可 2.使用纯代码 mywidget::mywidget(QWidget *parent) : QWidget(parent) {this->setGeometry(100,100,500,500);this->setObjectName("mywidget");this->setStyleSh…

TypeScript系列之-理解TypeScript类型系统画图讲解

TypeScript的输入输出 如果我们把 Typescript 编译器看成一个黑盒的话。其输入则是使用 TypeScript 语法书写的文本或者文本集合。 输出是编译之后的 JS 文件 和 .d.ts 的声明文件 其中 JS 是将来需要运行的文件(里面是没有ts语法,有一个类型擦除的操作)&#xff0…

Python爬虫之分布式爬虫

分布式爬虫 1.详情介绍 分布式爬虫是指将一个爬虫任务分解成多个子任务,在多个机器上同时执行,从而加快数据的抓取速度和提高系统的可靠性和容错性的技术。 传统的爬虫是在单台机器上运行,一次只能处理一个URL,而分布式爬虫通过将…

【C++】用红黑树封装map和set

我们之前学的map和set在stl源码中都是用红黑树封装实现的,当然,我们也可以模拟来实现一下。在实现之前,我们也可以看一下stl源码是如何实现的。我们上篇博客写的红黑树里面只是一个pair对象,这对于set来说显然是不合适的&#xff…

运行游戏找不到steam_api64.dll怎么办?steam_api64.dll丢失解决方法

steam_api64.dll是64位Windows操作系统上的一个动态链接库(DLL)文件,其大小通常在1.5-3.5 MB之间。这个文件对于Steam平台至关重要,因为它实现了游戏验证、更新等功能,并确保了用户拥有游戏的合法使用权。它通过提供一…

tensorflow.js 使用 opencv.js 将人脸特征点网格绘制与姿态估计线绘制结合起来,以获得更高的帧数

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图 文章目录 系列文章目录前言一、实现步…

【Liunx】什么是make和makefile?

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

蓝桥杯-油漆面积

代码及其解析:(AC80%) 思路:是把平面划成单位边长为1(面积也是1)的方格。每读入一个矩形,就把它覆盖的方格标注为已覆盖;对所有矩形都这样处理,最后统计被覆盖的方格数量即可。编码极其简单,但…

让无刷电机转起来——换相(BLDC)

目录 1. 引言 2. 无刷电机换相原理 2.1 通电原理(一相) 2.2 换相原理(三相) 2.3 驱动电路 2.3.1 上下桥臂 2.3.2 六步换相 3. 结束语 1. 引言 前面博客,博主对于无刷电机的驱动方式与电路作了简要的介绍&#…