问题:

想要用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. end.jenkins的备份和迁移

    数据备份: 进入安装目录 cd /var/lib/jenkins ​ 进入到主目录下,可以看到很多文件,是否需要全部打包呢?其实我们只需要打包4个文件就可以了. 如上图所示分别是 config.xml ...

  2. Metal 开发教程(一)

    原文链接: https://developer.apple.com/documentation/metalkit/mtkview?language=objc MTKView 用于创建,配置,显示met ...

  3. typescript 安装调试(二)

    一.安装ts-node 今天介绍另外一种更加方便的ts调试方式,需要安装以下几个库 第一个库是ts-node,这个库可以直接运行ts文件无需实时编译成js文件后再运行 安装命令  npm i ts-n ...

  4. MySQL原理简介—1.SQL的执行流程

    大纲(2426字) 1.MySQL驱动的作用 2.Java系统中的数据库连接池的作用 3.MySQL中的数据库连接池的作用 4.网络连接必须让线程来处理 5.SQL接口会负责处理接收到的SQL语句 6 ...

  5. VUE 前端读取excel表格内容

    <el-upload class="upload-demo" :action="''" :show-file-list="false" ...

  6. golang之异步队列Asynq

    Asynq[1]是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的sidekiq[2]和Python的celery[3].Go生态类似的还有machinery[4]和gowor ...

  7. golang之操作kafka

    安装第三方包: go get github.com/IBM/sarama 生产者实例: package main import ( "fmt" "github.com/I ...

  8. 图片渲染 API:极速生成电商、社媒、营销、横幅、证书等图片!

    不知道还有没有同学还记得,当时自己开发智能体时,有一个自动生成证书图片的功能,既方便又实用.今天我们就来带大家回顾一下,如何快速生成图片,并且最重要的是,完全无需通过 HTTP 调用,极大提高了操作的 ...

  9. 痞子衡嵌入式:i.MXRT1170上PXP对CM7 TCM进行随机地址短小数据写入操作限制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上PXP对CM7 TCM进行随机地址短小数据写入操作限制. 在 MCU 里能够对片内外映射的存储器进行读写操作的主设 ...

  10. 4.mysql中的存储过程

    创建存储过程和函数 CREATE [DEFINER = {USER | CURRENT_USER}] # 定义者是谁 PROCEDURE sp_name ([proc_parameter[,...]] ...