最爱947 2023-04-17 17:59 采纳率: 75%
浏览 54
已结题

(matlab)索引超出数组边界,怎么解决?

运行后显示索引超出边界要怎么解决呀,有人教教我吗

clc;
clear;
% 读取原始图像
I = imread('lena.bmp');
I = rgb2gray(I);
% 将图像进行小波变换
[cA, cH, cV, cD] = dwt2(I, 'haar');
% 将小波系数进行FFT变换
fft_cA = fft2(cA);
fft_cH = fft2(cH);
fft_cV = fft2(cV);
fft_cD = fft2(cD);
% 生成随机的数字水印
watermark = randi([0 1], 1, 64);
% 将数字水印嵌入到小波系数中
alpha = 0.1;
for i = 1:8
for j = 1:8
block = fft_cA((i-1)*64+1:i*64, (j-1)*64+1:j*64);
block(33:64) = block(33:64) + alpha * watermark((i-1)*8+j);
fft_cA((i-1)*64+1:i*64, (j-1)*64+1:j*64) = block;
end
end
% 将嵌入了数字水印的小波系数进行逆FFT变换
idwt_cA = ifft2(fft_cA);
idwt_cH = ifft2(fft_cH);
idwt_cV = ifft2(fft_cV);
idwt_cD = ifft2(fft_cD);
% 将逆变换后的小波系数合并成一张图像
I_watermark = idwt2(idwt_cA, idwt_cH, idwt_cV, idwt_cD, 'haar');
% 显示原始图像和带有数字水印的图像
figure;
subplot(1, 2, 1);imshow(I);
title('Original Image');
subplot(1, 2, 2);
imshow(I_watermark);
title('Watermarked Image');
% 从带有数字水印的图像中提取出数字水印
extracted_watermark = zeros(1, 64);
for i = 1:8
for j = 1:8
block = fft_cA((i-1)*64+1:i*64, (j-1)*64+1:j*64);
extracted_watermark((i-1)*8+j) = abs(corr2(block(33:64), watermark((i-1)*8+j)));
end
end
% 显示提取出的数字水印
figure;
subplot(1, 2, 1);
imshow(I_watermark);
title('Watermarked Image');
subplot(1, 2, 2);
bar(extracted_watermark);
title('Extracted Watermark');

  • 写回答

4条回答 默认 最新

  • CSDN专家-sinJack 2023-04-17 18:43
    关注

    这个错误可能是因为在嵌入数字水印时,小波系数的大小与数字水印的大小不匹配导致的。
    可以检查一下代码中的循环是否正确,以及数字水印的大小是否与小波系数的大小匹配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 联想笔记本开机出现系统更新界面
  • ¥15 各位帮帮我 我不想重做系统
  • ¥30 微信小程序蓝牙数据透传
  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题
  • ¥15 HBuilderX打包H5网页,扫码模块无法使用
  • ¥15 Javascript跳转页面后,无法执行后面代码,如何解决?
  • ¥15 echarts绘制图表
  • ¥15 请教两个关于高德地图定位不准的技术问题
  • ¥15 根据企业名称 对照两个文件 样本筛选/匹配