问题标签 [ndimage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
494 浏览

python - 如何广播或矢量化使用 scipy.ndimage map_coordinates 的二维数组的线性插值?

我最近在性能方面遇到了障碍。我知道如何通过暴力破解/循环二维数组中的每一行和每一列来手动循环并从原始单元格到所有其他单元格进行插值。

但是,当我处理形状为 (3000, 3000) 的二维数组时,线性间距和插值会停止并严重影响性能。

我正在寻找一种可以优化此循环的方法,我知道矢量化和广播只是不确定如何在这种情况下应用它。

我会用代码和数字来解释

正如你所看到的,这是非常暴力的,我已经设法广播了这部分的所有代码,但卡在了这部分。这是我要实现的目标的说明,我将进行第一次迭代

1.) 输入数组

输入数组

2.) 从 0,0 到原点 (3,3) 的第一个循环

第一个单元格到原点

3.) 这将返回 [10 9 9 8 0],最大值为 10,索引为 0

5.) 这是我使用的示例数组的输出

m的样本输出

这是基于接受的答案的性能更新。

次

0 投票
1 回答
595 浏览

python - 如何为 scipy.ndimage.label 的特征指定周期性连接?

给定一个 0 和 1 的 N*N 数组,我想构建集群列表(集群是一组用 1 标记的连接点)。

scipy.ndimage.label非常有用,因为它会告诉您连接了哪些点。

但我也想在我的数组上有周期性的边界条件,即点(0,j)(N,j)被识别(就像我粘上一个平面来制作一个圆柱体)。所以我需要告诉 scipy.ndimage.label 特征是通过边界连接的。

例如,如果我的原始数组是:

我想:

标签的结构参数允许指定连接(例如,即使它们对角接触也连接的特征),它也可以用于此目的吗?

0 投票
1 回答
1256 浏览

python - 如何使 ndimage.filters.maximum_filter 像 MATLAB 的 imregionalmax 函数一样工作?

在阅读了这篇文章并玩了 SciKit-image 之后,我发现 Python 与 MATLAB 的函数相比有所不同imregionalmax

我有这些代码行:

我希望一个二维数组只有一个True变量值 ([2,4])giannisgiorgos我在 MATLAB 中得到的值。相反,我最多取一个以上。

知道为什么会这样工作以及如何使它像在 MATLAB 中一样工作吗?

0 投票
1 回答
2279 浏览

python - 使用 ndimage.maximum_filter 和 skimage.peak_local_max 查找图像峰值

我试图找到给定图像的一些相对最大值。我知道有两种可能的方法,第一种是 using scipy.ndimage.maximum_filter(),第二种是 using skimage.feature.peak_local_max()

为了比较这两种方法,我修改了此处显示的 skimage 示例,以便比较找到的峰值。

这给出了每种方法的下一个峰值: 图片

我知道参数sizeformaximum_filter不等于min_distancefrom peak_local_max,但我想知道是否有一种方法可以同时给出相同的结果。那可能吗?

关于stackoverflow的一些相关问题是:

获取二维数组中局部最大值的坐标高于某个值

二维阵列中的峰值检测

0 投票
1 回答
177 浏览

python - 为什么我的旋转图像没有正确保存?

我需要围绕 150 张不同数量的图像旋转,以便我可以使用边界框正确注释我的数据。问题是由于某种原因,在运行我的代码并输入一些值后,图像文件没有被旋转保存。如何以旋转方式保存这些图像,以便在重新打开图像文件时它已经旋转?

鉴于我已经完全删除了文件并以相同的名称保存了一个新文件,因此该文件应该被正确覆盖。

在两张照片上运行此代码并正常终止后,我重新打开图像文件,它们 100% 未更改。

0 投票
1 回答
371 浏览

python - 将 Boxcar 平均值应用于地理空间图像

假设以下数组A是读取 GeoTIFF 图像的结果,例如使用 rasterio,其中 nodata 值被屏蔽,即数组B

我想在一个方形社区上应用一个棚车平均平滑。第一个问题是我不确定哪个 scipy 函数代表 boxcar 平均值?

我认为它可能是 ndimage.uniform_filter。但是,与 scipy.signal 相比,ndimage 不适用于掩码数组。

那么,我如何应用一个占 nodata 值的 boxcar 平均值,例如scipy.signal.medfilt

0 投票
1 回答
168 浏览

python - 有人可以向我解释 map_coordinates 如何在 n 维数据集上工作吗?

我有一个正在尝试转换的 3D 图像,具有已知的坐标映射。我正在尝试使用 map_coordinates 但 scipy 文档只讨论映射到一维向量,这让我很困惑。

转换是矢量化的,所以我可以给它一个 xyz 索引的网格网格,它会生成一个 3 x nx x ny x nz 数组,其中第一个索引越过向量场的 xyz 分量,其他索引直接对应于网格网格输入维度

现在我只需要将输出数组的数组元素映射到初始图像中的相应像素。我想使用 map_coordinates 但我不清楚坐标参数的格式。

谁能给我一个例子,说明在这种情况下我将如何创建坐标数组?

0 投票
1 回答
236 浏览

python - scipy ndimage 使用哪种三次样条方法进行 affine_transform?

背景/上下文

我试图重现ndimage.affine_transformscipy函数输出的值,但与实现相比,我似乎使用了不同的“三次”插值方案。scipy

例子

让我们看一个非常简单的示例(不是您想要使用三次插值的数据,但易于理解)。为了检查我实施了统一的 Catmull-Rom splines的值。我的小实现示例:

将产生以下图(请注意,由于不知道 scipy 函数的真实插值函数,我只是绘制了线性连接以更好地突出不同的数据点): 在此处输入图像描述

观察:

  • scipy 方法不使用 Catmull-Rom 样条
  • scipy 方法(没有过滤)不会产生通常与锐利边缘的三次插值相关的过冲,但正如 scipy 文档中提到的那样确实会导致一些模糊,这似乎也与我在例子
  • 预过滤的 scipy 方法更接近于 Catmull-Rom 样条但不完全相同(存在明显差异)

问题

  • scipy 使用哪种插值方案?
  • 在他们的文档和/或代码中实际在哪里找到它?
  • 奖励:在 Python 中实现它(用于检查目的)的简单方法
0 投票
1 回答
691 浏览

python - 将 scipy.ndimage.map_coordinates 中的插值方法设置为最近和双线性

我想将 scipy.ndimage.map_coordinates 的插值方法设置为双线性和最近(不同示例有 2 个不同)。

文档中没有提到如何更改插值方法。其中写了以下语句,我无法理解。

order : int, optional 样条插值的顺序,默认为 3。顺序必须在 0-5 范围内。

这是否意味着在 scipy.ndimage.map_coordinates 中只允许样条插值?我缺少什么以及如何更改插值。Ps-我需要它来改变弹性变形任务

0 投票
2 回答
295 浏览

python-3.x - 使用 Python 在灰度 CT 图像中隔离头部

我正在处理包含患者头部但也包含金属圆柱体“阴影”的 CT 图像。

在此处输入图像描述

这些“阴影”可以出现在下方、左侧或右侧。在上图中,它仅出现在图像的下侧。在下图中,它出现在左右方向。我没有任何关于图像中是否有圆柱体阴影的先验知识。我必须以某种方式检测并删除它。然后我可以继续分割头骨/头部。

在此处输入图像描述

为了创建一个可重现的示例,我想提供代表图像的 numpy 数组(128x128),但我不知道如何将其上传到 stackoverflow。

我怎样才能实现我的目标?

我尝试使用 ndimage 和 scikit-image 进行分割,但它不起作用。我得到了太多的片段。


在此处输入图像描述


12张原始图片

在此处输入图像描述

12张图片二值化

在此处输入图像描述

剥离的 12 张图像(膨胀、腐蚀 = 0.1、0.1)

在此处输入图像描述

用红色标记的图像不能帮助创建一个矩形蒙版,将包围头骨,这是我的最终目标。

请注意,在应用算法期间,我将无法一张一张地检查图像。