我出現這個錯誤是在對圖像進行等比例放大時,代碼如下:
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,分別對實部和虛部取整。
