2017-07-31 7 views
1

私はPythonとコーディングに新しいです。私は値の範囲を持つピクセルを含む.fitsイメージを持っています。私は、要件に従う、この画像の画素を見つけたい:スレッシュホールドされた画像の最下位ピクセルの座標を見つけるには?

1)(1)が満たされている場合、画素の値は、ピクセルは、可能な限り低いY COを有する6900

2)の閾値以上であります-ordinates。

つまり、私の画像に値> 6900の100ピクセルがある場合、画像の最下部に最も近い100個のピクセルを探したいと思います。

私は以下が含まれているしきい値ルールを追加することによって、最初の部分を達成した:

#open .fits file 
hdulist = fits.open(f, ignore_missing_end=True)  
hdulist.info() 

#close file and save data as numpy array 
scidata = hdulist[0].data 
hdulist.close() 
img = np.array(scidata) 

#determine threshold value and apply thresholding to image 
threshold = 6900 
test = np.greater_equal(img, threshold) 
np.count_nonzero(~np.isnan(test)) 

#plot image 
plt.imshow(img, cmap='magma') 
plt.show() 

しかし、I(2)を達成するのに困難を有しています。特定の値のしきい値を超えるピクセルの可能な最小のy座標を識別するコマンドがnumpyにありますか?

多くの感謝!

+0

あなたはリストのリストにすべてのキャスト、numpyの配列を転置してみてください、その後、各渡って繰り返すことができますthreshholding後のmin値の 'col_list.index(value)'を呼び出します。 – MLavrentyev

+0

1.質問:あなたの配列に 'nan 'があ​​りますか? 1行はこれを示していますが、この行は 'nan'を取り除きません。 2. 'img'の形は何ですか?私はそれが二次元だと仮定します。その場合は、最小値が定義されていない可能性があります。異なるx値ごとに最小値を設定するか、すべての最小値が同じ(最小)y値を持つようにしますか? –

+0

1.私の配列には 'nan'という値はありません - ' np.count_nonzero(〜np.isnan(test)) 'という行はしきい値以下のすべてのピクセルで' nan'と設定されていました。私は既に 'test'を線が役に立たないという閾値テストとして定義しています。 –

答えて

0

あなたが閾値以上の値を持つすべてのインデックスを見つけることができる、そしてこれらをソートして返す最低限の1

import numpy as np 

# Generate random data 
img = 10000 * np.random.rand(10, 10) 

# Find indices where the condition is met 
indices = np.where(img > 6900) 

# sort by y first then x 
sorted_indices = sorted((tpl for tpl in zip(*indices)), 
         key=lambda x: (x[1], x[0])) 

result = sorted_indices[0] 
関連する問題