(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');

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

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7542994
  • 你也可以参考下这篇文章:matlab遗传算法求函数极值,加粗那行出现问题咋解决呀,求帮忙!
  • 你还可以看下matlab参考手册中的 matlab 编辑或创建文件 edit
  • 除此之外, 这篇博客: Matlab中有关字符串数组的常见问题解答中的 为什么使用方括号追加字符串返回多个字符串? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 可以使用方括号在字符向量后面追加文本。但是,如果使用方括号向字符串数组添加文本,新文本将作为字符串数组的新元素进行串联。要为字符串追加文本,请使用plus运算符或strcat函数。

    例如,如果串联两个字符串,则结果是一个 1×2 字符串数组。

    str = ["Hello" "World"]
    
    str = 1×2 string array
        "Hello"    "World"

    但是,如果串联两个字符向量,则结果是一个更长的字符向量。

    str = ['Hello' 'World']
    
    chr = 'HelloWorld'

    要为字符串(或字符串数组的元素)追加文本,请使用 plus 运算符而不是方括号。

    str = "Hello" + "World"
    
    str = "HelloWorld"

    另外,也可以使用 strcat 函数。无论输入参数是字符串还是字符向量,都可以使用 strcat 追加文本。

    str = strcat("Hello","World")
    
    str = "HelloWorld"

    不管使用方括号、plus 还是 strcat,都可以指定任意数量的参数。在 Hello 和 World 之间追加一个空白字符。

    str = "Hello" + " " + "World"
    
    str = "Hello World"

     

  • 您还可以看一下 硬核野生技术咨询客服小李老师的matlab零基础入门路径规划城市遍历机器人路径等问题课程中的 数据显示格式、逻辑值等小节, 巩固相关知识点

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632