我需要堆叠许多由相同形状的2D numpy数组表示的图像(即取它们的总和或中值)。但是,当我堆叠它们时,它们需要正确对齐-每个图像虽然形状相同,但都是黑色的,中心有一个圆形的小物体,但不完全位于中心。我可以找到每个图像的质心坐标(使用SourceProperties.centroid
包中的模块photutils
),但是每个图像的质心坐标都不同-它们也是子像素坐标(例如:{ {1}}。
由于质心具有子像素坐标,因此我不知道一种将对象简单移动到阵列中心的方法,因此,如果有一种方法可以使每个对象按其唯一性对齐,则似乎更简单当我堆叠它们时,形心坐标...换句话说:
(y, x) = (203.018, 207.397)
但是我不太确定这在代码中的样子。这可能吗?
答案 0 :(得分:1)
步骤1:忽略子像素/小数部分,因为这对阵列没有意义。数组不能向右移动0.34
个元素。
步骤2:滚动阵列以始终放置质心。
步骤3:堆叠它们。
如下面的代码所示,它将质心放置在数组的几何中心。
centroid1 = (203.018, 207.397)
centroid2 = (205.256, 199.312)
centroid1 = np.round(centroid1).astype(np.int)
centroid2 = np.round(centroid2).astype(np.int)
center = np.array(array1.shape)//2
array1_rolled = np.roll(array1, center-centroid1, (0, 1))
array2_rolled = np.roll(array2, center-centroid2, (0, 1))
array_list = [array1_rolled, array2_rolled]
stacked = np.median(array_list, axis=0)