2016-05-05 12 views
-4

私は自分の画像でいくつかの計算をしたいと思います。私は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 

結果が丸みを帯びているように思え。どうして?

+0

「バンド」の種類は? – beaker

+0

@beaker it unit16 –

+0

より小さい* unsigned *整数から大きな* unsigned *整数を減算するとどうなると思いますか? – excaza

答えて

1

通常、画像はUINT8またはUINT16を使用して保存されるために発生します。
解決策は、データをdoubleまたはsingleに変換することです。

次の行を入れてください:

bands = double(bands); 

そして、それが動作するはずですが。

+0

または符号付き整数...浮動小数点データ型に変換するプログラムは、整数演算を前提として開発されたときには、望ましくない動作まで自分自身を開くのに最適です。 – excaza

+0

@excaza、あなたが書いたすべてに同意します。しかし、私が書いたことは、OPを "難しい"ポイントに導くでしょう。 – Royi

+0

あなたはあなたの答えを投稿する1時間前に彼は "トリッキーな"部分に向けられました。 – excaza

関連する問題