基于混沌的变换域图像数字水印算法及其测试

2023-12-03 11:40

本文主要是介绍基于混沌的变换域图像数字水印算法及其测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、项目需求分析

1.1项目介绍

本算法是将数字水印置乱加密后微小的扰动原始彩色图像经离散余弦变换后的对应系数,从而达到数字水印嵌入的目的。 实验表明算法简单高效,原图像与嵌入水印后图像差异小,水印提取准确,能较好的保证数字水印不可感知性,在对嵌入水印图像进行各种加噪、裁剪、旋转、压缩等处理后,水印仍有较强的鲁棒性。

1.2功能需求

  1. 实现混沌随机数的生成
  2. 实现图像加解密
  3. 实现数字水印置乱

  4、实现变换域图像数字水印的嵌入与提取

5、对含水印图像进行鲁棒性测试和相关性分析

  • 项目分析与设计

2.1项目需解决的关键技术问题

  1. 各种图像格式之间的相互转换,各种值类型间的转换
  2. DCT水印嵌入和提取
  3. 混沌随机数的生成和图像加解密

4、对生成的水印图像进行攻击测试

2.2项目流程

  1. 混沌序列的生成和图像加解密

 

  1. 水印和嵌入与提取

 

  1. 鲁棒性检测

   对含水印的图像进行加噪、加噪、裁剪、旋转、压缩等攻击,再提取出的水印与未受攻击的图像提取出的水印进行比较。

 

2.3功能模块

项目主要分为三部分:

一、水印图像的生成:

   采用改进型logistic混沌序列生成算法,生成一维的混沌序列,再转为二维的二值矩阵与原始二值图片进行异或加密,加密后的图像再进行置乱,消除水印像素间的相关性,故能提高水印抗图像剪裁等操作的鲁棒性,因为有置乱操作,剪切攻击后恢复的水印也是完整的。置乱后的图片为水印图片。

二、数字水印嵌入和提取:

Step1: 将原始彩色载体图像进行 8伊8 的分块,得到(M*M2)/(8*8)个子块Block。

Step2: 对每个子块进行 DCT 变换,各自得到 8*8 的系数矩阵。

Step3: 对水印图像进行 Arnold 置乱。

Step4: 依据 Arnold 置乱后的水印图像W(i,j) 来扰动对应的Block(i,j)系数矩阵,采用乘性扰动方式,微调系数矩阵各元素的值,即

式中,a为扰动因子,通常琢 取很小的正数。 本算法的a 取值为0. 04。

Step5: 对 扰 动 后 的 图 像 块 进 行 反 余 弦 变 换(IDCT,Inverse Discrete Cosine Transform) ,合并图像块,视其为嵌入水印的图像。

水印提取只需采用与水印嵌入的逆操作即可实现。

 

三、对含水印的图像进行攻击和测试

 对含水印的图片分别进行噪声攻击、压缩攻击、剪切攻击、旋转攻击,测试与不受攻击提取的水印间的相关性,改变攻击参数测试水印的鲁棒性强弱。

 

三、项目设计与实现

3.1项目设计

3.3.1数字水印基本框架

一个数字水印系统一般包括三个基本方面:水印的生成、水印的嵌入和水印的提取或检测。数字水印的嵌入和提取的一般过程基本框架如图3.1,图3.2所示。

图3.1 水印嵌入的一般过程基本框架

图3.2 水印检测的一般过程基本框架

 

 

3.2项目实现

3.2.1 水印图片的生成

  1. 混沌随机数的生成

   采用了改进型logistic映射,且为满映射状态,生成一维的混沌随机数序列再将其归一化,初始值为0.学号。

 

混沌序列(double):

归一化后(uint8):

对归一化后的序列进行二值化(logical):im2bw(B)默认是0.5,换算成255就是127.5,小于127.5为0,所以7和9是0

 

二维的混沌序列

 

  1.  二维混沌序列和图片进行异或操作加密

      

  1. 对加密后图像进行解密

  1.  对加密后的图像进行置乱

图像置乱是一种图像加密技术,通过某种算法仅将一幅图像像素的次序打乱,而像素个数及图像的直方图不变。 由于对水印进行置乱可以消除水印像素间的相关性,故能提高水印抗图像剪裁等操作的鲁棒性。目前用的较多的置乱方法有 Fass 曲线,Gray 代码、Arnold 变换和幻方方式等。Arnold 变换直观且具有周期性,是 Arnold 在遍历理论中提出的一种变换,也称猫脸变换 ( Arnold忆s Cat Map)。

 

3.2.2 DCT数字水印嵌入和提取

 

1、 DCT水印嵌入

DCT 变换的基本原理是将图像f(x,y) 分块后的每一子块单独进行二维 DCT 变换,将每个数据单元的值转化为 M伊N 个系数,构成系数矩阵。 将系数按Zig-Zag 顺序排列,左上角第一个元素是直流分量(DC,Direct Current),称为直流系数,表示该数据块的灰度平均值。本实验对直流层进行嵌入。

 

2、 DCT对水印的提取

3、 对提取出的水印进行置乱还原,再对还原的图像进行解密

 

 

 

置乱还原:

 

解密:置乱还原后的水印与混沌二值矩阵进行异或。

    

 

 

3.2.3 对水印图像进行攻击和测试

1、 对含水印的图像进行攻击和测试,主要用了高斯噪声攻击和椒盐噪声攻击、旋转攻击、压缩攻击、剪切攻击,除了旋转攻击之外抵抗攻击性挺强的,基本上能看出来原图形,旋转攻击只有是1度的时候效果还可以。

 

2、相关性分析

 

 

3、 剪切攻击测试

剪切宽64像素长128像素时:

  

剪切宽128 128时:

      

 

剪切256 128时:已经不是很清楚了

   

4、旋转攻击测试

旋转1度

  

相关性:

 

 

 

旋转2度:图片已经很模糊了,相关性是还可以的

 

相关性:

旋转3度就完全看不清了

 

相关性也降到了0.76

  1. 噪声攻击测试

高斯噪声:

  

相关性:

 

椒盐噪声:

   

相关性:

 

  1. 压缩攻击测试

压缩比:75

 

   

相关性:

 

压缩比:60

  

相关性:

 

压缩比 40

   

 

压缩比 30

 

 

 

压缩比 15时图片已经看不怎么清楚了

  

传图不易,如需完整代码请下载!

https://download.csdn.net/download/qq_39980334/11258396

这篇关于基于混沌的变换域图像数字水印算法及其测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/449321

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO