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

(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日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan