3

Python で 16 ビットまたは 32 ビットのイメージを読み込み、正しいイメージ値を配列として取得するにはどうすればよいですか?

PIL + Numpy、および GDAL + Numpy などを使用して SRTM (Shuttle Radar Topography Mission) を読み込もうとしました。小さな断片が必要なだけなので、ArcGIS を使用して必要な範囲を tif ファイルとして取得します。

ただし、上記のテストでも、配列内の値は正しくありません。たとえば、標高範囲が 136 から 737 の CA で SRTM を使用しましたが、numpy を使用して最大値と最小値を取得すると、配列値の範囲は -3.40 から 737 になり、多くの負の値が表示されます。私に何ができる?私はいくつかの間違いを犯しますか?

私が使用したコードは、ipythonを使用して次のとおりです。

import Image
import numpy as num
im=Image.open('srtm.tif')
imarray=num.array(im)
imarray
array([[ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
   [ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
   [ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
   ...,
   [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
   [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
   [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
      0.00000000e+00,   0.00000000e+00,   0.00000000e+00]], dtype=float32)
import gdal
tif = gdal.Open('srtm.tif')
arr = tif.ReadAsArray()
arr
array([[ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
     -3.40282347e+38,  -3.40282347e+38,  -3.40282347e+38],
   [ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
      6.11000000e+02,   6.17000000e+02,   6.17000000e+02],
   [ -3.40282347e+38,  -3.40282347e+38,   4.00000000e+02, ...,
      6.11000000e+02,   6.17000000e+02,   6.17000000e+02],
   ...,
   [  1.50000000e+02,   1.50000000e+02,   1.48000000e+02, ...,
      1.73000000e+02,   1.73000000e+02,   1.73000000e+02],
   [  1.49000000e+02,   1.49000000e+02,   1.48000000e+02, ...,
      1.73000000e+02,   1.73000000e+02,   1.73000000e+02],
   [  1.49000000e+02,   1.49000000e+02,   1.48000000e+02, ...,
      1.73000000e+02,   1.73000000e+02,   1.73000000e+02]], dtype=float32)

num.max(arr)
737.0
num.min(arr)
-3.4028235e+38
4

1 に答える 1

0

これらの値は実際には正しいと思います。多くの形式の科学画像では、ヌルまたは飽和ピクセルを表すために、極端に高いまたは極端に低い特定の値が使用されます。私の提案は、これらのピクセルを計算に含めたり、次のようにゼロに設定したりしないことですarr[arr < 0] = 0

于 2012-07-20T03:17:16.933 に答える