这是个matlab关于添加水印的程序,帮忙看看错在哪
%embed.m%清除workspace的变量clearall;%打开计时器tic%在第十段嵌入N=10;%段的大小framesize=32;%水印的大小watersiz...
%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(:); 展开
%清除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);%%给指定的段加水印
%%%%%%%%%%%%%%改后运行即可!
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);%%给指定的段加水印
%%%%%%%%%%%%%%改后运行即可!
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询