从 astropy 我得到 2D numpy.ndarray 数据形状:(2016, 3040) 这是一个6Mpx的阵列 我想在 3040 列中搜索缺陷。
我对列错误的定义是
n
列 500 次
“单元格”(m,n) 的值比单元格 m,n-2 AND m,n+2 小 50 个单位,其中 m 为 0.... 2016
我在迭代行 m
有效,错误被正确识别——但速度很慢。 因为我想处理 20-40 张图像,然后再纠正列缺陷。所以时间是个问题。
在这种蛮力方法之前,我正在试验 column.mean() 函数。 这不适合检测坏柱。 我仍然不检查缺陷是否从 m、m+1、m+2 连续出现。 只是计算并假设列错误是在批准时。一列中 25% 的像素显示的值(此处为 50)明显低于相邻像素。
有一个名为 fixfits 的工具,由 Sander Pool 创建。 Sander Pool 提供的这个工具不再可用。我担心 sander Pool 已经去世了。 对于即将推出的 Windows 版本,您永远不知道它是否适用于未来版本。
如何加快处理速度的一些想法numpy 受到高度赞赏。
这是数据结构
数据分类:
这是我的 Python 代码
import numpy as np
row_index =0
col_index =0
row_max = 2016
col_max = 3040
threshold_intensity = 50
result_array= np.zeros(col_max)
for x in range(2,col_max-2):
for y in range( 1, row_max-1):
compare = data[y,x] + 50 #threshold_intensity
if ((compare < data[y,x-2]) and (compare < data[y,x+2])):
result_array[x] = result_array[x]+1
if result_array[x] >500 :
print("Index: "+ str(x))
break
for i in range(1,500):
print (str(i)+" :" + str(result_array[i]))
学习 astroy、numpy 和 Python 论坛
如果你的唯一目标是消除循环,我想你可以这样做
compare = data + threshold_intensity
mask = (compare < np.roll(data, -2, axis=-1) & (compare < np.roll(data, 2, axis=-1)
result_array = mask.sum(axis=0)