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,分别对实部和虚部取整。
本文作者:Weltㅤ
本文链接:https://www.cnblogs.com/tangjielin/p/16140658.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步