代码

终于搞定啦,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(
' 嵌入水印后的图象 ' );
 

你可能感兴趣的:(代码)