您好,我有一段代码看了很久都不知道它是用什么方法嵌入数字水印嵌入模型的,希望您指点一下,谢谢

查看: 4558|回复: 13|关注: 0
图像水印matlab编程问题,真的非常感谢!
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
size=256;block=8;blockno=size/LENGTH=size*size/64;
Alpha1=0.02;&&Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);J= zeros(size,size);W= zeros(blockno,blockno);L= zeros(size,size);block1= zeros(size,size);block2= zeros(size,size);
%产生高斯水印,并显示水印信息;
randn('seed',10);mark=randn(1,LENGTH);
subplot(3,3,1);plot(mark);title('高斯水印');
subplot(3,3,2);I=imread('f.jpg');& &
imshow(I);title('源图');
%显示prewitt为算子的边缘图
I=rgb2gray(I);
BW=edge(I,'prewitt');subplot(3,3,3);imshow(BW);
title('边界图');
for m=1:blockno
& &for n=1:blockno
& && &x=(m-1)*block+1;& && &y=(n-1)*block+1;
& && &&&block_dct1=I(x:x+block-1,y:y+block-1);
& && &&&block_dct1=dct2(block_dct1);
& & BW_8_8=BW(x:x+block-1,y:y+block-1);
& && &if m&=1|n&=1
& && && &T=0;
& && &else
& && && &T=sum(BW_8_8);& & T=sum(T);
& && &if T&T1
& && && &Alpha=Alpha2;
& && &else
& && && &Alpha=Alpha1;
block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));& &&&block_dct1=idct2(block_dct1);
D(x:x+block-1,y:y+block-1)=block_dct1;&&
& && &k=k+1;
%显示嵌入水印后的图像
subplot(3,3,4);imshow(D,[]);title('嵌入水印后的图像')
imwrite(D,'e:\with mark.bmp','bmp');
% 对入水印后图像进行JPEG压缩 
L=imread( 'e:\with mark.bmp','bmp');
imwrite (L,'e:\JPEG attack.jpg','jpeg','Quality',70);
J=imread('e:\JPEG attack.jpg','jpeg');
subplot(3,3,5);imshow(J);title('受JPEG压缩攻击后的图像');
由于是初学者,试验过程中出现了很多问题都不能自己解决,希望大家能帮帮忙,真的非常感谢!
问题:1、嵌入水印后的图像是黑白的且至显示出了一部分,请问怎样修改程序将整幅图像以彩色形式显示出来?
2、对图像进行JPEG压缩攻击后显示的图想是一幅纯白图像,请问这是什么原因,应该怎样解决?
[ 本帖最后由 vincent92 于
13:37 编辑 ]
<h1 style="color:# 麦片财富积分
关注者: 1
希望给你帮助
嵌入水印后的图像是黑白的原因:
I=rgb2gray(I);& && && && && && && && &&&%把I转换成灰度图片
BW=edge(I,'prewitt');& && && && && && & %使用prewitt方法找出边界
& && & block_dct1=I(x:x+block-1,y:y+block-1);& &%从灰度图像中选择一块区域
& && & block_dct1=dct2(block_dct1);& && && && & %计算bolck_dct1的DCT变换
& && & BW_8_8=BW(x:x+block-1,y:y+block-1);& && &%从边界图像BW中选择一块区域
你嵌入水印的操作都是基于I,BW而言的,而I,BW都是黑白的,所以嵌入水印后的图片都是黑白的。
显示出了一部分的原因:
for m=1:blockno& && && && && && && && && && && &%blockno等于32
& &for n=1:blockno
& && & x=(m-1)*block+1;& && &
& && & y=(n-1)*block+1;& && && && && && && && & %block等于8
& && &block_dct1=I(x:x+block-1,y:y+block-1);& &%从灰度图像中选择一块区域
& && & block_dct1=dct2(block_dct1);& && && && & %计算bolck_dct1的DCT变换
这边你x的最大值是249,x+block-1的最大值也就是256,所以你显示的图像大小应该是256*256,当你给的图像的像素大于256*256的时候,就只能256*256的部分,也就是只出现了一部分。如果要全部出现,你要修改blockno的值,这需要看你图像像素的大小。大概是blockno= fix(size(I,1)/block).
附件里,我大概的翻译了一下你的程序,希望对你有帮助。
22:48 上传
点击文件名下载附件
2.22 KB, 下载次数: 12432
翻译的程序,不要M币
<h1 style="color:# 麦片财富积分
回复 2# yangzhijie1488 的帖子
谢谢,你的解释给了我很大的帮助
<h1 style="color:# 麦片财富积分
你好,我的程序也出现这样的问题,不知道怎么修改。没法看附件,能不能发一份给我?谢谢!
<h1 style="color:# 麦片财富积分
数字水印中遇到的问题
数字水印中遇到的问题的答复
size=256;block=8;blockno=size/LENGTH=size*size/64;
Alpha1=0.02;&&Alpha2=0.1; T1=3; I=zeros(size,size);
D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);
J= zeros(size,size);W= zeros(blockno,blockno);L= zeros(size,size);
block1= zeros(size,size);block2= zeros(size,size);
%产生高斯水印,并显示水印信息
randn('seed',10);mark=randn(1,LENGTH);
subplot(3,3,1);plot(mark);title('高斯水印');
% 显示原图
subplot(3,3,2);I=imread('f.jpg');& &
imshow(I);title('源图');
% 显示prewitt为算子的边缘图
I=rgb2gray(I);& && && && && && && && &&&%把I转换成灰度图片
BW=edge(I,'prewitt');& && && && && && & %使用prewitt方法找出边界
subplot(3,3,3);imshow(BW);& && && && &&&%显示边界
title('边界图');
for m=1:blockno& && && && && && && && && && && &%blockno等于32
& &for n=1:blockno
& && & x=(m-1)*block+1;& && &
& && & y=(n-1)*block+1;& && && && && && && && & %block等于8
& && & block_dct1=I(x:x+block-1,y:y+block-1);& &%从灰度图像中选择一块区域
& && & block_dct1=dct2(block_dct1);& && && && & %计算bolck_dct1的DCT变换
& && & BW_8_8=BW(x:x+block-1,y:y+block-1);& && &%从边界图像BW中选择一块区域
& && & if m&=1|n&=1
& && && &&&T=0;& && && && && && && && && && && &%m=1,n=1时T=0
& && & else
& && && &&&T=sum(BW_8_8);& & T=sum(T);& && && & %T为BW_8_8行与列的总和
& && & end
& && & if T&T1& && && && && && && && && && && & %当T1大于3时alpha等于0.02
& && && &&&Alpha=Alpha2;
& && & else& && && && && && && && && && && && & %否则alpha等于0.1
& && && &&&Alpha=Alpha1;
& && & end
& && & block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));& &%修改第一个值
& && & block_dct1=idct2(block_dct1);& && && && && && && && &%再对bolck_dct1进行DCT反变换
& && & D(x:x+block-1,y:y+block-1)=block_dct1;& && && && && &%把每次变换的结果都保存在D中
& && & k=k+1;
%显示嵌入水印后的图像&&
subplot(3,3,4);imshow(D,[]);title('嵌入水印后的图像')
imwrite(D,'e:\with mark.bmp','bmp');
%%%% 对入水印后图像进行JPEG压缩 %%%%
L=imread( 'e:\with mark.bmp','bmp');
imwrite (L,'e:\JPEG attack.jpg','jpeg','Quality',70);
J=imread('e:\JPEG attack.jpg','jpeg');
subplot(3,3,5);imshow(J);title('受JPEG压缩攻击后的图像');
18:28 上传
点击文件名下载附件
2.22 KB, 下载次数: 3473
<h1 style="color:# 麦片财富积分
回复 1# wangyan071500 的帖子
加油:loveliness:
<h1 style="color:# 麦片财富积分
呵呵 学姐也坐的是这类的东西吗
<h1 style="color:# 麦片财富积分
回复 2# yangzhijie1488 的帖子
以前发过帖子,你的解释给了我很大的帮助,请问您能不能再帮我看看这个程序啊?谢谢您!
%  定义常量 ,变量
M= 256; % 原图像长度
N=32; % 水印信息长度
K=8; % 分块系数
I=zeros(M,M);
D=zeros(M,M);
D1=zeros(M,M);
J=zeros(M,M);
W=zeros(N ,N);
L=zeros(M,M);
LENGTH=M*M/64;
block=zeros(M,M);
block_dct1=zeros(M,M);
block_dct2=zeros(M,M);
block_idct=zeros(M,M);
block1=zeros(M,M);
block2=zeros(M,M);
% 读取源图像和水印数据,并显示
subplot ( 3 , 3 , 1) ;
I = imread( 'f.jpg' ) ;
imshow(I) ;title ('源图像');
%产生高斯水印,并显示水印信息;
randn('seed',10);mark=randn(1,LENGTH);
subplot(3,3,2);plot(mark);title('高斯水印信息');
%嵌入水印后
x=(m-1)*K+1;
y=(n-1)*K+1;
block_dct=I(x:x+K-1,y:y+K-1);
block_dct1=dct2(block_dct);
if J(m,n)==0
block_dct2=block_dct1*(1+a*0.01);
block_idct=idct2(block_dct2);
D(x:x+K-1,y:y+K-1)=block_
tem=tem+1;
% 显示嵌入水印后的图像
D1=round(D);
subplot(3,3,3);imshow(D1,[]);title ( '嵌入水印后' )
% 对入水印后图像进行JPEG压缩 
L=imread( 'e:\with mark.bmp','bmp');
imwrite (L,'e:\JPEG attack.jpg','jpeg','Quality',70);
J=imread('e:\JPEG attack.jpg','jpeg');
imshow(J);title('受JPEG压缩攻击后的图像');
受JPEG压缩攻击的图像一般还能显示原图的轮廓,但这个程序仿真后受JPEG压缩的图像是一副纯白的图,请问要怎么改正才能解决呢?
<h1 style="color:# 麦片财富积分
看了挺有收获的,新手学习中~~~
<h1 style="color:# 麦片财富积分
翻译的很好的。。。。。。。。。
站长推荐 /2
利用MATLAB进行传感器数据分析
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区}

我要回帖

更多关于 数字水印嵌入模型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信