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