问题:

想要用DCT技术,在Matlib上实现水印的隐藏和提取(带GUI界面),且加上一些攻击(噪声、旋转、裁剪),以及用NC值评判!

流程

选择载体

[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.*'},'选择图片');%文件选择,这里可以选择可以打开的图片格式
str=[pathname filename];%被选择的文件路径
[handles.I,handles.map]=imread(str);%读取图片
zai=imread(str);
%zai=[handles.I,handles.map];
psnr_cover=double(zai);
guidata(hObject,handles);%图像串行化,保存在hObject,这样我整个页面都能取到handles的值
axes(handles.axes1);%把显示范围限定在axes1
imshow(zai,[]);%显示图片

选择要嵌入的水印

[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.*'},'选择图片');%文件选择,这里可以选择可以打开的图片格式
str=[pathname filename];%被选择的文件路径
[handles.I,handles.map]=imread(str);%读取图片
%water=[handles.I,handles.map];
global water;
water=imread(str);
water=rgb2gray(water);
water=double(water)/255;
water=ceil(water);
%guidata(hObject,handles);%图像串行化,保存在hObject,这样我整个页面都能取到handles的值
axes(handles.axes4);%把显示范围限定在axes4
imshow(water);%显示图片
dimI=size(water);
global rm;
global cm;
rm=dimI(1);cm=dimI(2);

嵌入

start_time=cputime;
global water;
global rm;
global cm;
cda0=blkproc(handles.I,[8,8],'dct2');
mark=water;
alpha=10;
global k1;
global k2;
k1=randn(1,8);
k2=randn(1,8);
[r,c]=size(handles.I);
cda1=cda0; % cda1 = 256_256
for i=1:rm % i=1:32
for j=1:cm % j=1:32
x=(i-1)*8;y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
global a1;
a1=blkproc(cda1,[8,8],'idct2');
a_1=uint8(a1); axes(handles.axes5);%把显示范围限定在axes5s
imshow(a_1);%显示图片
%imwrite(a_1,'嵌入水印后的图.bmp','bmp');
%subplot(2,3,3),imshow(a1,[]),title('嵌入水印后的图像');
%disp('嵌入水印处理时间')
embed_time=cputime-start_time
set(handles.text13,'string',num2str(embed_time));
p0=a_1;

攻击

1、白噪声攻击

gong=a1;
noise0=1*randn(size(gong));
gong=uint8(gong+noise0);

2、椒盐噪声

gong=imnoise(uint8(a1), 'salt & pepper', 0.01);%添加密度为0.01的椒盐噪声

3、旋转

gong=uint8(imrotate(uint8(a1),30,'nearest','crop'));

4、裁剪

%原图进行分色并剪切
gong=a1;
I_r= gong(:,:,1);
I_r(1:128,1:128)=255;
%三色通道合并
gong(:,:,1) = I_r;
gong=uint8(gong);

提取

global k1;
global gong;
global k2;
global water;
dimI=size(water); psnr_watermarked=double(gong);
dca1=blkproc(gong,[8,8],'dct2');
p=zeros(1,8);
for i=1:dimI(1) %行
for j=1:dimI(2) % j=1:32列
x=(i-1)*8;y=(j-1)*8;
p(1)=dca1(x+1,y+8);
p(2)=dca1(x+2,y+7);
p(3)=dca1(x+3,y+6);
p(4)=dca1(x+4,y+5);
p(5)=dca1(x+5,y+4);
p(6)=dca1(x+6,y+3);
p(7)=dca1(x+7,y+2);
p(8)=dca1(x+8,y+1);
if corr2(p,k1)>corr2(p,k2),warning off MATLAB:divideByZero;
mark1(i,j)=1;
else
mark1(i,j)=0;
end
end
end
axes(handles.axes7);%把显示范围限定在axes5s
imshow(mark1);%显示图片
embed_time=cputime-start_time;
set(handles.text14,'string',num2str(embed_time)); NC=nc(mark1,water) %调用nc.m子函数
set(handles.text15,'string',num2str(NC));

结果

源程序见github

参考

1、数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)

 

DCT实现水印嵌入与提取(带攻击)的更多相关文章

  1. 【读书笔记】iOS-基带攻击

    一,iOS设备中的蜂窝网络通信栈运行在专门的芯片上,这个芯片就是数字基带处理器. 参考资料:<黑客攻防技术宝典-iOS实战篇>

  2. 嵌入AppBar并且带搜索建议的搜索框(Android)

    先看结果: 相关的官方文档在这里:Creating a Search Interface Android官方提供了两种方式: 弹出一个Dialog,覆盖当前的Activity界面 在AppBar中扩展 ...

  3. A Blind Watermarking for 3-D Dynamic Mesh Model Using Distribution of Temporal Wavelet Coefficients

    这周看了一篇动态网格序列水印的论文,由于目前在网格序列上做水印的工作特别少,加之我所看的这篇论文中的叙述相对简洁,理解起来颇为困难.好在请教了博士师兄,思路明朗了许多,也就把这思路整理在此了. 论文作 ...

  4. DWT在栅格数据嵌入不可见水印的应用

    1.1.1 嵌入水印 有意义的文字->二值图像->二值序列->置乱.加密->二值水印信息. 读取栅格数据,并进行M*M的分块处理,M为偶数.设分块区域,尺寸为偶数,满足DWT的 ...

  5. C++实现网格水印之调试笔记(六)—— 提取完成

    昨天在修改了可以调试出来的错误之后,提取出的水印和嵌入的仍然相去甚远.这个时候我觉得有必要整理一下嵌入和提取的整个过程. 嵌入过程: Step1,嵌入的时候对网格的拉普拉斯矩阵L进行特征值分解,得到特 ...

  6. 基于DCT的图片数字水印实验

    1. 实验类别 设计型实验:MATLAB设计并实现基于DCT的图像数字水印算法. 2. 实验目的 了解基于DCT的图像数字水印技术,掌握基于DCT系数关系的图像水印算法原理,设计并实现一种基于DCT的 ...

  7. 【前端安全】JavaScript防XSS攻击

    什么是XSS XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击.本来缩小应该是CSS,但为了和层叠样式(Cas ...

  8. XSS跨站脚本攻击

    1.简介 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式.那么什么是XSS ...

  9. 《图解Http》 10,11章:构建Web的技术, Web的攻击技术

    10.2动态HTML 通过调用客户端脚本语言js,实现对web页面的动态改造.利用DOM文档对象模型,指定想发生变化的元素. 10.22 更容易控制的DOM 使用DOM可以将HTML内的元素当作对象操 ...

  10. JWT攻击手册:如何入侵你的Token

    JSON Web Token(JWT)对于渗透测试人员而言,可能是一个非常吸引人的攻击途径.因为它不仅可以让你伪造任意用户获得无限的访问权限,而且还可能进一步发现更多的安全漏洞,如信息泄露,越权访问, ...

随机推荐

  1. NLP语言学基础

    不同的自然语言有不同的语法结构,因此需要对语言数据进行语法解析,才能让机器更准确地学到相应的模式.而语言不同于图像,数据标注工作需要有一定的语言学知识,因此数据的整理也相对更困难.下面以英语为例(别的 ...

  2. flask+APScheduler定时任务的使用

    目录 APScheduler简介 安装 add_job参数详解 结合flask使用 用uwsgi启动项目 用gunicorn+gevent启动flask项目 APScheduler简介 APSched ...

  3. 从零开始学java(第一天)

    上班日学习时间很短,而且很多事情会耽搁,就会写的比较少 近几期的笔记以复习为主,后面会逐渐拓展对我个人来说的新知识 1. 复习了一下typore的语法,方便以后记笔记用 # MarkDown学习(# ...

  4. ZCMU-1133

    emm就直接看的前辈的了. 唉 #include <stdio.h> #include <string.h> #include <algorithm> //我不成熟 ...

  5. .NET静态代码编织——肉夹馍(Rougamo)5.0

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件.相比动态代理AOP需要在应用启动时进行初始化,编译时完成代码编织的肉夹馍减少 ...

  6. 重磅宣布|强强联合,腾讯云携手Veeam提供云上数据存储服务

    近日获悉,腾讯云对象存储COS正式通过Veeam备份软件标准化测试,携手为用户提供云上数据存储服务. Veeam对COS的支持是通过SOBR( Scale out backup repository) ...

  7. rabbitmq3.7.3 发布了一个新的 exchange x-random

    direct exchange 同一个 routing key 可以绑定多个 queue,当给这个routing key发消息时,所有 queue 都会投递.这个行为对于一些场景不适用,有时我们希望只 ...

  8. 【转载】Spring Security Oauth2 自定义 OAuth2 Exception

    https://www.cnblogs.com/merryyou/p/9100260.html 前言 在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下 { & ...

  9. 【转载】 Spring Security做JWT认证和授权

    https://www.jianshu.com/p/d5ce890c67f7 上一篇博客讲了如何使用Shiro和JWT做认证和授权(传送门:https://www.jianshu.com/p/0b11 ...

  10. 盘点5个常用的.Net依赖注入框架!

    盘点5个常用的依赖注入框架,特别是前面2个. 1.Microsoft.Extensions.DependencyInjection 这是.Net Core框架本身内置集成的,我们只需引入Microso ...