代码

网友投稿 597 2022-11-07 21:25:07

代码

终于搞定啦,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 dontsubplot( 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 ;endN = zeros(x, 1 );x = m * n; for i = 1 :x N(I1(i)) = M(i);enda = 1 ; for j = 1 :n for i = 1 :m dctF2(i,j) = N(a); a = a + 1 ; endend % % DCT反变换,得到嵌入水印的图象idctF1 = idct2(dctF2);subplot( 2 , 2 , 4 );imshow(idctF1,[ ]);title( ' 嵌入水印后的图象 ' );

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:有oracle 10g,但没有安装arcgis,又想使用空间数据库的解决方案
下一篇:mybatis.type
相关文章