这是个matlab关于添加水印的程序,帮忙看看错在哪

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这是个matlab关于添加水印的程序,帮忙看看错在哪相关的知识,希望对你有一定的参考价值。

%embed.m
%清除workspace的变量
clear all;
%打开计时器
tic
%在第十段嵌入
N=10;
%段的大小
framesize=32;
%水印的大小
watersize=1024;
%读取原图像,并归一化
im1=double(rgb2gray(imread('C:\MATLAB6p5\work\图片1.png')))./255;
%原图像行列数
[Mc Nc]=size(im1);
%读取水印,并归一化
im2=double(rgb2gray(imread('C:\MATLAB6p5\work\图片3.png')))./255;
%水印行列数
[Mm Nm]=size(im2);
%得到原图像的频谱
im1f=fft2(im1);
%得到水印频谱
im2f=fft2(im2);
%得到原图像频谱的上半部分
%只对频谱的上半部分处理
%减小负频率部分对频谱的干扰
im1fp=im1f(1:end/2+1,:);
%排序
[xp yp]=sort(abs(im1fp(:)));
im1fps=im1fp(yp);
%在指定的段加入水印
im1fps(N*framesize+1:N*framesize+watersize)=im2f(:);
%恢复到排序之前的顺序
im3fp(yp)=im1fps;
%还原成矩阵形态
im3fp=reshape(im3fp,Mc/2+1,Nc);
%构造频域的下半部分
im3fn=conj(im3fp(end-1:-1:2,:));
im3fn(:,2:end)=im3fn(:,end:-1:2);
%合并得到完整的图像频谱
im3f=[im3fp;im3fn];
%反变换得到空域图像
%加入水印时引起的频谱不对称会导致反变换结果为复数
%取其实部
im3=real(uint8(ifft2(im3f).*255));
%显示图像
figure;
imshow(im3);
title('添加了水印的图像');
%保存图像
imwrite(im3,'dft2_watermarked.bmp','bmp');

下面是运行时的错误提示
Warning: Integer operands are required for colon operator when used as index.
> In C:\MATLAB6p5\work\embed.m at line 27
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> C:\MATLAB6p5\work\embed.m
On line 32 ==> im1fps(N*framesize+1:N*framesize+watersize)=im2f(:);

%在指定的段加入水印
im1fps(N*framesize+1:N*framesize+watersize)=im2f(:);%%这里,im1fps的大小为33024*1,那么指定的段为321-1344总长度为1024.而im2f(:)的长度为65536*1,你让im1fps的第321行到1344行,等于im2f的65536行,明显不对。
改为下面的形式:
im2ff=im2f(:);%%转化成列向量
im1fps(N*framesize+1:N*framesize+watersize)=im2ff(N*framesize+1:N*framesize+watersize);%%给指定的段加水印
%%%%%%%%%%%%%%改后运行即可!
参考技术A matlab告诉你了啊,A(I) = B, the number of elements in B and
I must be the same,就是说B和I中的元素数量必须是一样的,不然就出错追问

想知道要怎么改,。谢谢

追答

把出错的那行找到,然后单步运行到那一行,再在命令窗口分别看等号左边和右边的两个矩阵,你就知道该怎么改了

matlab怎么画迭代过程图?

这是算法,能够求解出来。小白求大佬帮忙

参考技术A matlab怎么画迭代过程图?
可以通过for循环语句来完成,即
for i=1:n
添加计算distHistory ,avgHistory代码
添加plot绘图代码(图片中的代码)
end
参考技术B 楼主说出我心中想要的,可换个角度想,是否可以得到单个程序计算时间,然后记录这些数据,再画出来,在程序前面加上
tic
,结尾加上toc,matlab上会显示时间,记录下来,再画。当然如果程序里有多个程序需要记录时间,是否会记录每个的时间,待解答。如果楼主画出来了,告诉我声,谢谢
参考技术C 楼主说出我心中想要的,可换个角度想,是否可以得到单个程序计算时间,然后记录这些数据,再画出来,在程序前面加上
tic
,结尾加上toc,matlab上会显示时间,记录下来,再画。当然如果程序里有多个程序需要记录时间,是否会记录每个的时间,待解答。如果楼主画出来了,告诉我声,谢谢

以上是关于这是个matlab关于添加水印的程序,帮忙看看错在哪的主要内容,如果未能解决你的问题,请参考以下文章

关于CSS滤镜设置的问题,为啥网页显示不出来效果,变不了灰色,帮忙查看一下代码看看错在哪里,谢谢

c语言问题帮忙调试程序,看看下面程序错在哪儿?

关于opencv对图片添加水印

请大神帮帮忙:我想请问一下用Matlab在数字音乐中嵌入提取水印的具体操作

求matlab 嵌入提取可见水印的程序

关于用matlab仿真一级倒立摆的LQY控制的程序,大伙谁有帮忙提供一下,多谢了