【问题标题】:Is there a way to stack multiple 2D (numpy) image arrays about a specified point?有没有办法围绕指定点堆叠多个 2D(numpy)图像数组?
【发布时间】:2018-08-07 18:28:01
【问题描述】:

我需要堆叠许多由相同形状的 2D 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

但我不确定这在代码中会是什么样子。这可能吗?

【问题讨论】:

    标签: python arrays python-3.x image numpy


    【解决方案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) 
    

    【讨论】:

    • 谢谢,但我正在寻找一种考虑亚像素部分的方法,并在堆叠之前将其准确居中。也许多次过采样就可以解决问题?
    • 尝试scipy.ndimage.zoom放大图像:放大10倍使0.1像素成为数组的1个元素,等等。
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多