查找图像中最亮像素的坐标并将其输入到数组中

时间:2011-11-08 20:17:30

标签: python numpy

我被要求编写一个程序,通过将图像文件转换为numpy数组并在指定阈值以上的图像中生成最亮像素坐标数组(表示背景干扰)来查找图像中的“星星” )。  一旦找到了图像中最亮的像素,我必须记录其x,y坐标,并将该像素的值和周围10X10像素区域设置为零,从而有效地从图像中移除星形。 我已经有一个帮助代码将图像转换为数组,并试图解决问题如下;

我定义了一个变量

    Max = array.max()

并使用了while循环;

    while Max >= threshold
        coordinates = numpy.where(array == Max) # find the maximum value

但是我想让它遍历所有坐标的整个数组,不仅找到第一个最大值,还要在找到时删除每个最大值并将周围的10X10区域设置为零。我已经考虑过使用for循环来做这个,但我不确定如何使用它,因为我不熟悉Python。

我很感激任何建议, 感谢

2 个答案:

答案 0 :(得分:2)

Astronomy.net会为您执行此操作:

  

如果你用天体坐标对天空进行天文成像   你不知道 - 或者不信任 - 那么Astrometry.net就是为你准备的。输入   一个图像,我们将返回天体测量校准元数据,   加上落在视野内的已知物体列表。

     

我们已经建立了这种天体测量校准服务来创建正确的,   每个有用的符合标准的天体测量元数据   任何状态下的天文图像,过去和未来   档案混乱。我们希望这有助于组织,注释和制作   搜索世界上所有的天文信息。

您甚至不必将图像上传到他们的网站。您可以下载source。它是根据GPL许可并使用NumPy,因此如果需要,您可以随身携带它。

请注意,您需要先将位图转换为以下之一:JPEG,GIF,PNG或FITS图像。

答案 1 :(得分:2)

有很多不同的方法可以用numpy等来实现。

蛮力""蛮力"方式:

import Image
import numpy as np

im = Image.open('test.bmp')
data = np.array(im)
threshold = 200
window = 5 # This is the "half" window...
ni, nj = data.shape 
new_value = 0

for i, j in zip(*np.where(data > threshold)):
    istart, istop = max(0, i-window), min(ni, i+window+1)
    jstart, jstop = max(0, j-window), min(nj, j+window+1)
    data[istart:istop, jstart:jstop] = new_value

或更快的方法......

import Image
import numpy as np
import scipy.ndimage

im = Image.open('test.bmp')
data = np.array(im)
threshold = 200
window = 10 # This is the "full" window...
new_value = 0

mask = data > threshold
mask = scipy.ndimage.uniform_filter(mask.astype(np.float), size=window)
mask = mask > 0
data[mask] = new_value