matlab错误信息,求解

clearall;closeall;clc;%---------------------秘密信息的制造--------------------I_water=imread... clear all;
close all;
clc;

%---------------------秘密信息的制造--------------------
I_water = imread('d:\shuiyin.jpg');
Img_gray = imresize(I_water,[513,513]);
Img_gray = rgb2gray(Img_gray);
Img_bw = im2bw(Img_gray,0.9);

%----------------------载体图像读入---------------------
Img_cover = double(imread('d:\1.png'));
[nrow,ncol] = size(Img_cover);

%---------------------秘密信息的嵌入---------------------
N=8; %嵌入位置(位平面)的选择
Img_imbeded = zeros(nrow,ncol);
for i =1:nrow
for j = 1:ncol
Img_bin = dec2bin(Img_cover(i,j),8);
ifImg_bw(i,j)==0;
Img_bin(N)='0';
else
Img_bin(N)='1';
end;
Img_imbeded(i,j) = bin2dec(Img_bin);
end
end

%结果显示
subplot(121);
imshow(uint8(Img_cover));
title('载体图像')
subplot(122);
imshow(uint8(Img_imbeded));
title('伪装图像')

错误信息是:Attempted to access Img_bw(1,513); index out of bounds because size(Img_bw)=[512,512].

哪位大神知道错在哪里?怎么改?
展开
 我来答
tianxiawulang
2013-12-18 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2629万
展开全部

1、首先,你贴出的程序与报错信息并不相符。猜测你是在遇到错误之后,把原来的

Img_gray = imresize(I_water,[512,512]);

改成了

Img_gray = imresize(I_water,[513,513]);

2、错误的原因:

你在前面使用imresize把水印大小设置成512x512(或513x513,道理相同),而后面的for循环则是按照载体图像的尺寸进行的,一旦载体图像的宽高大于512(或513),当循环执行到i或j为513(或514)时,访问Img_bw(i,j)就会出现数组索引越界。

 

3、解决的方法:

首先应该明确:如果载体图像足够小(宽高均小于512),则不会出错;而如果载体图像比较大,要想不出错,有几种不同的处理方式,你可以根据自己的需要选择:

 

(1)通过imresize把水印图像调整到足够大,例如:

.......
I_water = imread('d:\shuiyin.jpg');
%----------------------载体图像读入---------------------
Img_cover = double(imread('d:\1.png'));
[nrow,ncol] = size(Img_cover);
Img_gray = imresize(I_water,[nrow,ncol]);
Img_gray = rgb2gray(Img_gray);
Img_bw = im2bw(Img_gray,0.9);  
.......

 

(2)在for循环中加入判断,如果i或j超过512,则该像素不注入水印(具体代码从略):

 

(3)对for循环体中注入水印的语句使用试探结构,使得索引越界时不报错:

for  i =1:nrow
    for  j = 1:ncol
        Img_bin = dec2bin(Img_cover(i,j),8);
        try     % -----> 新加入的语句
            if Img_bw(i,j)==0;
                Img_bin(N)='0';
            else
                Img_bin(N)='1';
            end;
        end     % -----> 新加入的语句
        Img_imbeded(i,j) = bin2dec(Img_bin);
    end
end
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
衷琪EN
2013-12-18 · TA获得超过185个赞
知道答主
回答量:92
采纳率:0%
帮助的人:101万
展开全部
数组超范围了。。程序试图访问Img_bw(1,513)元素,而Img_bw的大小是512*512。。
错在秘密信息的嵌入这一块,那个for循环里,
if Img_bw(i,j)==0;
你的j = 1:ncol,而[nrow,ncol] = size(Img_cover),又不是[nrow,ncol] = size(Img_bw)。。。Img_cover的大小和Img_bw是不一样的,所以会出错。

应该把 载体图像读入 这一块的
[nrow,ncol] = size(Img_cover);改为
[nrow,ncol] = size(Img_bw);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式