| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1863 人关注过本帖
标题:[求助]基于小波的数字水印问题(附代码了)
只看楼主 加入收藏
wxyz511
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-19
收藏
 问题点数:0 回复次数:4 
[求助]基于小波的数字水印问题(附代码了)

我对matlab不怎么懂。。。要求能用字符串做为水印嵌入到图像中 ,,,急这里先谢谢大家了。。
代码如下 帮帮忙

clear;
%装入原图像1
f1='';
[f1,p]=uigetfile('*.jpg;*.bmp;*.tif;*.gif','打开原始图像文件');
addpath(p);
if f1==0;
return;
end;
I=imread(f1); %把原始图像转换成矩阵
save image;
load image;

%小波函数
type = 'db1';

% 2维离散Daubechies小波变换
[CA1, CH1, CV1, CD1] = dwt2(I,type);
C1 = [CH1 CV1 CD1];

%系数矩阵大小
[length1, width1] = size(CA1);
[M1, N1] = size(C1);

% 定义阈值T1
T1 =50;
alpha = 0.2;

%在图像中加入水印
for counter2 = 1: 1: N1
for counter1 = 1: 1: M1
if( C1(counter1, counter2) > T1 )
marked1(counter1,counter2) = randn(1,1);
NEWC1(counter1, counter2) = double( C1(counter1, counter2) ) +alpha * abs( double( C1(counter1, counter2) ) ) * marked1(counter1,counter2) ;
else
marked1(counter1, counter2) = 0;
NEWC1(counter1, counter2) = double( C1(counter1, counter2) );
end;
end;
end;

%重构图像
NEWCH1 = NEWC1(1:length1, 1:width1);
NEWCV1 = NEWC1(1:length1, width1+1:2*width1);
NEWCD1 = NEWC1(1:length1, 2*width1+1:3*width1);

R1 = double( idwt2(CA1, NEWCH1, NEWCV1, NEWCD1, type) );

%分离水印
watermark1 = double(R1) - double(I);

figure(1);
subplot(1,2,1);
image(I);
axis('square');
title('原始图像');
subplot(1,2,2);
imshow(R1/250);
axis('square');
title('Daubechies小波变换后图像');

figure(2);
imshow(watermark1*10^16);
axis('square');
title('水印图像');

% 水印检测
newmarked1 = reshape(marked1, M1*N1, 1);
% 检测阈值
T2 = 60;
for counter2 = 1: 1: N1
for counter1 = 1: 1: M1
if( NEWC1(counter1, counter2) >T2 )
NEWC1X(counter1, counter2) = NEWC1(counter1, counter2);
else
NEWC1X(counter1, counter2) = 0;
end;
end;
end;

NEWC1X = reshape(NEWC1X, M1*N1, 1);

correlation1 = zeros(1000,1);
for corrcounter = 1: 1: 1000
if( corrcounter == 500)
correlation1(corrcounter,1) = NEWC1X'*newmarked1 / (M1*N1);
else
rnmark = randn(M1*N1,1);
correlation1(corrcounter,1) = NEWC1X'*rnmark / (M1*N1);
end;
end;

% 计算阈值
originalthreshold = 0;
for counter2 = 1: 1: N1
for counter1 = 1: 1: M1
if( NEWC1(counter1, counter2) > T2 )
originalthreshold = originalthreshold + abs( NEWC1(counter1, counter2) );
end;
end;
end;
originalthreshold = originalthreshold * alpha / (2*M1*N1);

corrcounter = 1000;
originalthresholdvector = ones(corrcounter,1) * originalthreshold;

figure(3);
plot(correlation1, '-');
hold on;
plot(originalthresholdvector, '--');
title('原始的加水印图像');
xlabel('水印');
ylabel('检测响应');

[此贴子已经被作者于2006-5-20 16:50:31编辑过]

搜索更多相关主题的帖子: 数字水印 代码 
2006-05-20 16:49
wxyz511
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-19
收藏
得分:0 

。。。自己顶顶吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2006-05-20 17:14
wxyz511
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-19
收藏
得分:0 
2006-05-21 08:50
wxyz511
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-19
收藏
得分:0 
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2006-05-21 22:03
快速回复:[求助]基于小波的数字水印问题(附代码了)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011837 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved