首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在指定的点上堆叠多个2D (numpy)图像数组?

有没有办法在指定的点上堆叠多个2D (numpy)图像数组?
EN

Stack Overflow用户
提问于 2018-08-08 02:28:01
回答 1查看 397关注 0票数 0

我需要堆叠许多图像,这些图像由相同形状的二维numpy数组表示(即取它们的总和或中位数)。但是,当我堆叠它们时,它们需要正确对齐--每个图像,虽然形状相同,但都是黑色的,中心周围有一个小的圆形对象,但不完全在中心。我可以找到每个图像的质心坐标(通过photutils包使用模块SourceProperties.centroid ),但是这些坐标对于每个图像来说是不同的--它们也是子像素坐标(例如:(y, x) = (203.018, 207.397))。

我不知道有一种方法可以简单地将对象移动到数组的中心,因为质心具有亚像素坐标,所以如果有一种方法可以在我堆叠它们时通过它们独特的质心坐标来对齐每个对象,这似乎会更简单……换句话说:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 03:10:04

步骤1:忽略子像素/小数部分,因为它对数组没有意义。数组不能通过0.34元素向右移位。

步骤2:滚动阵列以一致地放置质心。

步骤3:堆叠它们。

如下面的代码所示,它将质心放置在数组的几何中心。

代码语言:javascript
复制
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) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51733255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档