MATLAB数字水印系统

  • 课题介绍

本课题为基于MATLAB的小波变换dwt和离散余弦dct的多方法对比数字水印系统。带GUI交互界面。有一个主界面GUI,可以调用dwt方法的子界面和dct方法的子界面。流程包括,读取宿主图像和水印图像,嵌入,多种方法的攻击(剪切,加噪,旋转等),提取,最后利用psnr峰值信噪比进行评价不同攻击下,鲁棒性的好坏。

  • GUI界面
  • 源码
  1. 读取宿主图像

[name,path]=uigetfile({'*.bmp';'gif'},'载入图像');

    

        X=imread([path,name]);  %获取位置

        axes(handles.axes1);%axes表示获取位置,这里选取的位置为axes1;

                imshow(X); %显示图像

        save('X');  %保存变量

       guidata(hObject,handles) %更新结构体;

  1. 读取水印图像

[name,path]=uigetfile({'*.bmp';'gif'},'载入图像');

    

        W=imread([path,name]);  %获取位置

        axes(handles.axes2);%axes表示获取位置,这里选取的位置为axes1;

        W=rgb2gray(W)

        W=imresize(W,[64 64])

        imshow(W); %显示图像

        save('W');  %保存变量

       guidata(hObject,handles) %更新结构体;

  1. 嵌入

for i = 1:64    

    ref1(i)=mean(lowarray(:,i)); %对矩阵每列求均值

    ref2(i)=mean(lowarray(i,:)); %对矩阵每行求均值

    for j=1:64

        w(i,j,:)=int8(dec2bin(W(i,j),8))-48; %dec2bin将矩阵W的每个元素转换成二进制值,每个二进制长度为8

        result(i,j,1)=xor(w(i,j,1),(lowarray(i,j)>ref1(i)));

        result(i,j,2)=xor(w(i,j,2),(lowarray(i,j)>ref2(i)));        

    end

end

for i=1:4096

    ref3tmp=[XCsource(16381+4*i:16384+4*i)];%128*128=16384

    ref3(i)=mean(ref3tmp);

    ref4tmp=[XCsource(32765+4*i:32768+4*i)];%128*256=32768

    ref4(i)=mean(ref3tmp);

    ref5tmp=[XCsource(49149+4*i:49152+4*i)];%(128+64)*256=49152  or (128+256)*128=49152

    ref5(i)=mean(ref5tmp);

        ref6(i)=mean(ref6tmp);

    ref7tmp=[XCsource(131057+16*i:131072+16*i)];%256*512=131072

    ref7(i)=mean(ref7tmp);

    ref8tmp=[XCsource(196593+16*i:196608+16*i)];%(128+256)*512=196608

    ref8(i)=mean(ref8tmp);

end

  1. 攻击

if get(handles.radiobutton1,'value')

    option=1;

   q=num2str(get(handles.edit3,'string'))

       Z = imrotate(Z,q,'crop');%旋转 角度可以控制

elseif get(handles.radiobutton2,'value')

    option=2;

    q1=str2num(get(handles.edit4,'string'))

    q2=str2num(get(handles.edit6,'string'))

    q3=str2num(get(handles.edit7,'string'))

    q4=str2num(get(handles.edit8,'string'))  

        

    Z(q1:q2,q3:q4)=255;%剪切 区间和嵌入值可以控制

   

       

    

elseif get(handles.radiobutton3,'value')

    option=3;

    q=str2num(get(handles.edit5,'string'))

       Z=imnoise(Z,'gaussian',q);%加噪声 选择参数 help imnoise

   

    

elseif get(handles.radiobutton4,'value')

    option=4;

    Z=Z

end

axes(handles.axes4)

imshow(Z,[]);

  1. 提取

for i =1:64

    for j=1:64

        pick(i,j,3)=xor(std(i,j,3),(lowarray(i,j)>(alaph3*reref3(i,j))));

        pick(i,j,4)=xor(std(i,j,4),(lowarray(i,j)>(alaph4*reref4(i,j))));

        pick(i,j,5)=xor(std(i,j,5),(lowarray(i,j)>(alaph5*reref5(i,j))));

        pick(i,j,6)=xor(std(i,j,6),(lowarray(i,j)>(alaph6*reref6(i,j))));

        pick(i,j,7)=xor(std(i,j,7),(lowarray(i,j)>(alaph7*reref7(i,j))));

        pick(i,j,8)=xor(std(i,j,8),(lowarray(i,j)>(alaph8*reref8(i,j))));

    end

end

for i=1:64

    for j=1:64

        od=double(reshape(pick(i,j,:),1,8));

        dec(i,j)=bin2dec(char(od+48));

    end

end

  1. psnr计算

origImg = double(origImg);

distImg = double(distImg);

[M N] = size(origImg);

error = origImg - distImg;

MSE = sum(sum(error .* error)) / (M * N);

if(MSE > 0)

    PSNR = 10*log(255*255/MSE) / log(10);

else

    PSNR = 99;

end

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

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

相关文章

跳台阶问题

剑指offer的一道简单题目。 描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 数据范围:1≤n≤40 要求:时间复杂度:O(n) &a…

C#和Python共享内存技术

我这里做一个简单的示例 1.C#写入内存的方法,FileName是内存共享的名字 t是内存size public static void SaveGluePLYToMemory(string FileName, string msg){try{ long t 100;// SetMemorySize(msg);// 100;//# 创建内存块,test1,其他语言利用这个内存…

sysbench 命令:跨平台的基准测试工具

一、命令简介 sysbench 是一个跨平台的基准测试工具,用于评估系统性能,包括 CPU、内存、文件 I/O、数据库等性能。 ‍ 比较同类测试工具 bench.sh 在上文 bench.sh:Linux 服务器基准测试中介绍了 bench.sh 一键测试脚本,它对…

Python库pandas之一

Python库pandas之一 基本数据结构Series构造器属性属性应用函数函数应用 基本数据结构 Pandas提供了两种类型的类来处理数据: Series:保存任何类型数据的一维数组。例如整数、字符串、Python对象等。DataFrame:一种二维数据结构&#xff0c…

ip是可以从能够上网的设备提取吗

是的,IP地址可以从能够上网的设备提取。以下是如何从不同设备提取IP地址的具体方法: 在电脑上提取IP地址 Windows: 打开命令提示符(按下 Win R,输入 cmd,按回车)。 输入命令 ipconfig,按回车。…

GAMES101(17~18节,物理材质模型)

材质 BRDF 材质:决定了光线与物体不同的作用方式 BRDF定义了物体材质,包含漫反射和镜面部分 BSDF (scattering散射) BRDF(reflect反射) BTDF 光线打击到物体上会向四面八方散射 反射 光线打击到物体上反射出去…

IIS开启后https访问出错net::ERR_CERT_INVALID

安装ArcGIS server和portal等,按照说明上,先开启iis,在安装server、datastore、portal、webadapter等,遇到一些问题: 问题1 访问http正常,访问https出错: 解决方案 从这里找到解决方案&…

【Android 源码分析】Activity生命周期之onPause

忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

java多线程-1-测试一个多线程程序

多线程基本概念 进程:程序的基本执行实体 线程:操作系统能够进行运算调度的最小单位,包含在进程之中 多线程:在等待线程的时间,处理其他线程,提高计算机处理效率以减小资源的占用 并发:在同一时…

【QT】QWidget 重要属性

文章目录 enabledgeometrywindowTitlewindowIconqrc 机制windowOpacitycursorfontQFont toolTip 和 toolTipDurationfocusPolicyQt::FocusPolicy styleSheet enabled 作用:设置控件是否可使用. true 表⽰可用, false 表⽰禁用. 对应的API bool isEnabled(); // 获…

揭秘遗传之谜:自闭症的遗传因素分析

在星贝育园这片充满爱与希望的土地上,我们不仅见证了无数自闭症儿童在康复训练中的点滴进步,更深刻理解了自闭症这一复杂疾病的多样性和挑战性。自闭症,也称为孤独症,是一种影响社交互动、语言和非语言交流以及行为模式的神经发育…

C++ 语言特性06 - lambda表达式

一:概述 1. 语法 [ captures ] ( params ) specifiers exception -> ret { body }其中:captures 是捕获列表,用于捕获当前函数作用域的变量,分为按值捕获和按引用捕获。params 是可选参数列表,和普通函数一样。spe…

通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免

CSMA/CA:载波监听多路访问/冲突避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance),即载波监听多路访问/冲突避免,是一种用于数据传输时避免各站点之间冲突的算法,尤其适用于无线局域网&…

python格式化输入输出

以下是使用 format()、f-string 和百分号 % 运算符进行 Python 数据格式化输入输出的示例代码。 1. 使用 format() 方法进行格式化 # 使用 format() 方法格式化数据并输出到文件 name "Alice" age 25 score 92.5# 格式化字符串 formatted_string "Name: {…

2022年6月 Frontier 获得性能第一的论文翻译

为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化,rocHPL 是 AMD 对 HPL 基准的开源实现,主要是针对节点进行优化的架构,是为百万兆级系统而设计的,比如:Frontier suppercomput…

深蕾半导体Astra™ SL1620详细介绍,嵌入式物联网处理器

一,SL1620是什么 Astra™ SL系列是深蕾半导体推出的高度集成的嵌入式物联网处理器SoC(System on Chip)系列产品,专为多模式消费者、企业和工业物联网工作负载而设计。SL1620是Astra™ SL系列中的一款成本和功耗优化的安全嵌入式So…

Windows 11 安装配置 Git 教程

目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统,广泛应用于软件开发中。 以下是Git的一些关键特…

【C#】CacheManager:高效的 .NET 缓存管理库

在现代应用开发中,缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用,缓存都能够帮助减少重复的数据查询和处理,从而提高系统的响应速度。然而,管理缓存并不简单,尤其是当你需要处…

使用RestTemplate调用EMQX API查询MQTT客户端列表信息

项目中集成mqtt客户端查询功能,使用到了EMQX api-v5,具体步骤: 一、准备工作 首先在EMQX dashboard中添加API 密钥 填写密钥名称,点击确定,会生成API Key和Secret Key,保存起来备用。 二、配置文件 在…

AWS Network Firewall - IGW方式配置只应许白名单域名出入站

参考链接 https://repost.aws/zh-Hans/knowledge-center/network-firewall-configure-domain-ruleshttps://aws.amazon.com/cn/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/ 1. 创建防火墙 选择防火墙的归属子网(选择公有…