我是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坐标?
非常感谢!
答案 0 :(得分: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]