为什么matlab会回答错误的答案

时间:2016-05-05 18:14:58

标签: matlab

我想对我的照片做一些计算。我使用Matlab,但它返回错误的答案。我不知道为什么。

这是我的档案:

    function [ newImage ] = Run( file )

info = geotiffinfo(file);
[bands,R1]=geotiffread(file);



imageSize=size(bands);

result=nan(imageSize(1),imageSize(2),7);

for i=100:105

    for j=100:105

       disp(strcat('Pixel ',sprintf('[%d,%d] of [%d,%d]',imageSize(1),imageSize(2), i,j)));
       b7=bands(i,i,5);
       b6=bands(i,i,4);
       b5=bands(i,i,3);
       b4=bands(i,i,2);
       b3=bands(i,i,1);

       %ndvi 7-4/7+4
       result(i,j,1)= (b7-b4)/(b7+b4);
       %NDI45 5-4/5+4
       result(i,j,2)= (b5-b4)/(b5+b4);
       %MTCI 6-5/5-4
       result(i,j,3)= (b6-b5)/(b5-b4);
       %MCARI [(B5 - B4) - 0.2(B5- B3)] * (B5 - B4)
       result(i,j,4)= ((b5-b4)-(0.2*(b5-b3)))*(b5-b4);
       %GNDVI 7-3/7+3
       result(i,j,4)= (b7-b3)/(b7+b3);
       %PSSR 7/4
       result(i,j,5)= (b7)/(b4);
       %S2REP 705 + 35 *((((B7 + B4)/2) - B5)/(B6 - B5))
       result(i,j,6)= 705 + 35 *((((b7 + b4)/2) - b5)/(b6 - b5));
       %IRECI 7-4/(5/6)
        result(i,j,7)=(b7-b4)/(b5/b6);



    end 
end


geotiffwrite('D:\SazmanJangalha\ref\result.tif', result, R1,  ...
       'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);
end

我只是运行这些命令并返回错误的答案:

     result(i,j,7)

ans =

     0

K>> b7-b4

ans =

      0

K>> b7

b7 =

    679

K>> b4

b4 =

   1149

K>> b7-b4

ans =

      0

似乎结果是四舍五入的。为什么呢?

1 个答案:

答案 0 :(得分:1)

这是因为通常使用UINT8UINT16存储图像 解决方案是将数据转换为doublesingle

放下以下一行:

bands = double(bands);

它应该有用。