0
点赞
收藏
分享

微信扫一扫

代码


终于搞定啦,dct读取图像的时候如果是值,会发现dct始终产生一个[1,10]的数组。
终于发现了问题的所在。
论文的思路差不多可以进行模拟啦,
今天发现上次和导师讨论的思路好像有点问题,空出的点并不能都嵌入呀,因为如果嵌入会无法分辨嵌入点和原来的点,所以可以插入的实际点要少!
下面是今天调试的代码


代码_频域

clear
%

%
读入原图象
trueImage
=
imread(
'
C:oat.png
'
);
alfa
=
.
1
;
LENGTH
=
2500
;
subplot(
2
,
2
,
1
);
imshow(trueImage);
title(
'
原始图象
'
);
%

%
对原图象进行DCT变换
%
dctF1
=
dct2(
'
C:9.jpg
'
);
dctF1
=
dct2(trueImage);
subplot(
2
,
2
,
2
);
imshow(log(abs(dctF1)),[ ]);
title(
'
DCT cofficient matrix
'
);
[m,n]
=
size(dctF1);

%

%
产生水印序列并对其排序
%
c
=
rand(
'
copyright
'
,
10
);
%
by dont
%
watermark1
=
radon(LENGTH,
1
);
watermark1
=
rand(LENGTH,
1
);
%
by dont
subplot(
2
,
2
,
3
);
%
imshow(watermark1,[]);
imshow(watermark1,[]);
title(
'
watermark seqence
'
)
[Y0,I0]
=
sort(watermark1);
%

%
找出水印嵌入位置(幅值较大的n个频域成分)
A
=
dctF1(:);
[Y1,I1]
=
sort(A);
x
=
m
*
n;
k
=
LENGTH;
M
=
zeros(x,
1
);
%

%
修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)
for
i
=
1
:x

if
k
>=
1

M(x)
=
Y1(x)
*
(
1
+
alfa
*
Y0(k));
k
=
k
-
1
;

else

M(x)
=
Y1(x);
end
x
=
x
-
1
;
end
N
=
zeros(x,
1
);
x
=
m
*
n;
for
i
=
1
:x
N(I1(i))
=
M(i);
end
a
=
1
;
for
j
=
1
:n

for
i
=
1
:m
dctF2(i,j)
=
N(a);
a
=
a
+
1
;
end
end
%

%
DCT反变换,得到嵌入水印的图象
idctF1
=
idct2(dctF2);
subplot(
2
,
2
,
4
);
imshow(idctF1,[ ]);
title(
'
嵌入水印后的图象
'
);

代码_频域


举报

相关推荐

0 条评论