Matlab 错误——提示“数组索引必须为正整数或逻辑值”

我出现这个错误是在对图像进行等比例放大时,代码如下:

F=imread('gull.jpg');
[mf,nf]=size(F);
dlt=0.3;
G1=uint8(zeros(int16(mf/dlt),int16(nf/dlt)));
[mg1,ng1]=size(G1);
for i=1:mg1
    for j=1:ng1
        fi=int16(dlt*i);
        fj=int16(dlt*j);
        if(fi>mf) fi=int16(mf);end
        if(fj>nf) fj=int16(nf);end
        G1(i,j)=F(fi,fj);
    end
end
figure;imshow(F);
figure;imshow(G1);

运行提示“数组索引必须为正整数或逻辑值”

出现这个错误的原因主要以下这个原因:

matlab 的数组中的第一个元素序号为 1 (但在C语言中的数组第一个为 0 ),也就是说在索引时,matlab索引到了 0 或者负值。

最后改正的代码如下(数据的改变主要是考虑到起始值):

F=imread('gull.jpg');
[mf,nf]=size(F);
dlt=0.3;
G1=uint8(zeros(int16(mf/dlt),int16(nf/dlt)));
[mg1,ng1]=size(G1);
for i=1:mg1
    for j=1:ng1
        fi=ceil(dlt*i);
        fj=ceil(dlt*j);
        if(fi>mf) fi=ceil(mf);end
        if(fj>nf) fj=ceil(nf);end
        G1(i,j)=F(fi,fj);
    end
end
figure;imshow(F);
figure;imshow(G1);

 改正之后可成功运行,原代码这里使用int16进行强制类型转换是不恰当的,因为强制类型转换采用四舍五入的方法,导致fi和fj的值可能为零,改为使用ceil函数即可

ceil函数说明如下:

ceil函数:朝正无穷大方向取整

用法说明:w=ceil(z)函数将输入z中的元素取整,值w为不小于本身的最小整数。

                 对于复数B,分别对实部和虚部取整。

posted @ 2022-04-13 15:48  Weltㅤ  阅读(13957)  评论(0编辑  收藏  举报