当前位置:网站首页 > 科技动态 > 正文

DiffIR图像复原

一、简介

基于离散小波变换(DWT)与奇异值分解(SVD)相结合的数字水印

二、源代码

clear all; close all; clc; key=35; %Arnold置换次数,作为密钥 Orignalmark=double(imread('suda64.bmp')); %读入64*64的水印图片 [wrow,wcol]=size(Orignalmark); if wrow~=wcol error('wrow~=wcol error'); end %--- 测试密钥key是否超出范围--------- n=check_arnold(wrow); if (key+1)>n error('arnold key error'); end Arnoldw=arnold(Orignalmark,wrow,key); %对水印图像进行Arnold转化 figure(1); imshow(Orignalmark); title('原始水印图片'); figure(2); imshow(Arnoldw); title('置乱后的水印图片'); Orignalpicture=double(imread('Lena.jpg')); figure(3); imshow(uint8(Orignalpicture)); title('原始图片'); %DWT变换 [ca1,ch1,cv1,cd1]=dwt2(Orignalpicture,'db1'); [ca1row,ca1col]=size(ca1); blocksize=ca1row/wrow; %每块的长度 water_vector=reshape(Arnoldw,1,wrow*wcol); %将置乱后的水印转化为一维的 wlength=wrow*wcol; %水印的长度 a=0.25; %量化步长 %------------------------------------ for k=1:wrow for p=1:wcol x=(k-1)*blocksize+1; y=(p-1)*blocksize+1; L=zeros(4,4); L=ca1(x:x+blocksize-1,y:y+blocksize-1); [U,S,V]=svd(ca1(x:x+blocksize-1,y:y+blocksize-1)); cc=floor(S(1,1)/a); if(water_vector(k*p)==1) %嵌入奇数倍 if(mod(cc,2)==0) cc=cc+1; end S(1,1)=a*cc; end if(water_vector(k*p)==0) %嵌入偶数倍 if(mod(cc,2)==1) cc=cc+1; end S(1,1)=a*cc; end L=U*S*V'; ca1(x:x+blocksize-1,y:y+blocksize-1)=L; end end markedimg=idwt2(ca1,ch1,cv1,cd1,'db1'); figure(4); imshow(uint8(markedimg)); title('嵌入水印后的图片'); extractedmark=extract(markedimg,Orignalmark); watermark=arnold(extractedmark,wrow,n-key); figure(5); imshow(watermark); title('提取出的水印图片'); psnrvalue=psnr(Orignalmark,watermark) Nc=nc(Orignalmark,watermark) %攻击---------------------------------------------------------------------- f=markedimg; attack=0; switch attack case 0, attackf=f; att='未攻击'; case 1, %%1. JPEG 压缩 imwrite(f,'attackf.jpg','jpg','quality',90); attackf=imread('attackf.jpg'); attackf=double(attackf)/255; att='JPEG压缩'; case 2, % %2. 高斯低通滤波 h=fspecial('gaussian',3,1); attackf=filter2(h,f); att='高斯低通滤波'; case 3, %%3. 直方图均衡化 attackf=histeq(f); att='直方图均衡化'; case 4, %%4. 图像增亮 attackf=imadjust(f,[],[0.4,1]); att='图像增亮'; case 5, %%5. 图像变暗 attackf=imadjust(f,[],[0,0.85]); att='图像变暗'; case 6, %%6. 增加对比度 attackf=imadjust(f,[0.3,0.6],[]); att='增加对比度'; case 7, %%7. 降低对比度 attackf=imadjust(f,[],[0.2,0.8]); att='降低对比度'; case 8, %%8. 添加高斯噪声 attackf=imnoise(f,'gaussian',0,0.01); att='添加高斯噪声'; case 9, %%9. 椒盐噪声 attackf=imnoise(f,'salt & pepper',0.05); att='椒盐噪声'; case 10, %%10. 添加乘积性噪声 attackf=imnoise(f,'speckle',0.08); att='添加乘积性噪声'; case 11, %%%11.中值滤波 attackf=medfilt2(f,[5 5]); att='中值滤波'; case 12, %%%12.剪切 f(200:456,200:456,:)=0; attackf=f; att='剪切'; case 13, %%%13.旋转 attackf=imrotate(f,15,'bilinear','crop'); att='旋转'; end; 

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述













四、备注

版本:2014a

版权声明


相关文章:

  • 控制语句对应的三种控制结构2025-09-07 17:30:02
  • tcpdump 查看2025-09-07 17:30:02
  • node_modules .bin2025-09-07 17:30:02
  • apm全链路监控2025-09-07 17:30:02
  • 小程序图片加载速度慢2025-09-07 17:30:02
  • 微信小程序云开发实例2025-09-07 17:30:02
  • 网站布局设计分析2025-09-07 17:30:02
  • 小程序生命周期有哪些2025-09-07 17:30:02
  • elasticsearch分组查询2025-09-07 17:30:02
  • 思科交换机上架安装视频2025-09-07 17:30:02