错误为第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)