C19980509 2020-04-10 17:05 采纳率: 0%
浏览 229

matlab编程出错不知道该怎么修改 可以指导一下吗? 谢谢!

错误为第28行 索引超出矩阵维度 不知道该怎么修改 可以指导一下吗 ?

%基于dwt的数字水印
clear;

%装入原图像
I = imread('C:\Users\lenovo\Desktop\Lena.bmp');

%装入水印图像 
message = imread('C:\Users\lenovo\Desktop\Watermarking.bmp');

%二维离散小波变换
[CA,CH,CV,CD] = dwt2(I,'db1');
C = [CH,CV,CD];
[length,width] = size(CA);
[M,N] = size(CA);
T1=100;
a=0.2;

%加入水印
for j=1:1:N
for i=1:1:M
if(C(i,j)>T1)
mark(i,j) = message(1,1);
WaterC(i,j) = double(C(i,j)) + a * abs(double(C(i,j))) * mark(i,j);
else
mark(i,j) = 0;
WaterC(i,j) = double(C(i,j));
end
end
end

%重构图像
WaterCH = WaterC(1:length,1:width);
WaterCV = WaterC(1:length,width + 1:2 * width);
WaterCD = WaterC(1:length,2 * width + 1:3 * width);
IW = double(idwt2(CA,WaterCH,WaterCV,WaterCD,'db1'));

%显示原始图像
figure;
subplot(1,4,1);
image(I);
axis('square');
title('原始图像');

%显示水印图像
subplot(1,4,2);
image(message);
axis('square');
title('水印图像');

%显示嵌入水印后的图像
subplot(1,4,3);
image(IW/250);
axis('square');
title('加入水印后的图像');

%水印检测
newmark = reshape(mark,M * N,1);

%检测阈值
T2=120;
for j = 1:1:N
for i = 1:1:M
if(C(i,j)>T2)
WaterCX(i,j) = WaterC(i,j);
else
WaterCX(i,j) = 0;
end
end
end

%提取水印
T3 = 140;
for j = 1:1:N
for i = 1:1:M
if(WaterC(i,j)>T3)
SY(i,j) = IW(i,j);
else
SY(i,j) = 0;
end
end
end

%显示提取后的水印图像
subplot(1,4,4);
image(SY);
axis('square');
title('提取的水印图像');

%计算峰值信噪比PSNR和均方误差MSE
for j = 1:1:N
for i = 1:1:M
D = sum(sum((WaterCX(i,j)-WaterC(i,j))^2))/M * N;
end
end
MSE = D
PSNR = 10 * log10(255^2/D)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:17
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)