1

我是 Python 和编码的新手。我有一个 .fits 图像,其中包含具有一系列值的像素。我想在这张图片中找到符合要求的像素:

1) 像素值高于阈值 6900。

2) 如果满足 (1),则像素具有可能的最低 y 坐标。

也就是说,如果我发现我的图像有 100 个像素值 > 6900,我希望在这 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()

但是,我很难实现(2)。numpy 中是否有一个命令可以识别高于某个阈值的像素的最小可能 y 坐标?

非常感谢!

4

1 回答 1

0

您可以找到值高于阈值的所有索引,然后对它们进行排序并返回最小的索引

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]
于 2017-07-31T13:43:58.877 回答