我需要堆叠许多图像,这些图像由相同形状的二维numpy数组表示(即取它们的总和或中位数)。但是,当我堆叠它们时,它们需要正确对齐--每个图像,虽然形状相同,但都是黑色的,中心周围有一个小的圆形对象,但不完全在中心。我可以找到每个图像的质心坐标(通过photutils包使用模块SourceProperties.centroid ),但是这些坐标对于每个图像来说是不同的--它们也是子像素坐标(例如:(y, x) = (203.018, 207.397))。
我不知道有一种方法可以简单地将对象移动到数组的中心,因为质心具有亚像素坐标,所以如果有一种方法可以在我堆叠它们时通过它们独特的质心坐标来对齐每个对象,这似乎会更简单……换句话说:
import numpy as np
# First image = array1, shape = (400, 400)
centroid1 = (203.018, 207.397)
# Second image = array2, shape = (400, 400)
centroid2 = (205.256, 199.312)
array_list = [array1, array2]
>>> stacked = np.median(array_list, axis=0) # but while setting centroid1 = centroid2 so that the two centroid points exactly overlap while computing median但我真的不确定这在代码中会是什么样子。这个是可能的吗?
发布于 2018-08-08 03:10:04
步骤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) https://stackoverflow.com/questions/51733255
复制相似问题