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,分别对实部和虚部取整。