问题标签 [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.
python - 直接将线段“绘制”到 numpy 数组
我在 python 中实现的第一个项目之一是对棒状渗透进行蒙特卡罗模拟。代码不断增长。第一部分是棒状渗透的可视化。在宽度*长度的区域中,用随机的起始坐标和方向绘制具有一定长度的直棒的定义密度(棒/面积)。由于我经常使用 gnuplot,因此我将生成的 (x, y) 开始和结束坐标写入一个文本文件,以便之后对其进行 gnuplot。
然后我在这里找到了一种使用 scipy.ndimage.measurements 分析图像数据的好方法。使用 ndimage.imread 以灰度方式读取图像。生成的 numpy 数组进一步减少为布尔值,因为我只对不同棒之间的连接感兴趣。然后使用 ndimage.measurements 分析生成的集群。这使我能够找出是否有从一侧连接到另一侧的路径。一个最小化的例子是here。
虽然这主要适用于对大量不同棒密度进行 1000 次迭代的蒙特卡罗模拟,但最终运行 8 小时或更长时间。这部分是由于创建的图像和阵列非常大,并且为更高的密度绘制了数千个棒。原因是我想模拟一系列几何形状(例如,500 到 20000 像素之间的长度),同时最大限度地减少像素化导致的误差。
我想最好的方法是不使用图像数据并将其视为矢量问题,但我什至不知道如何启动算法。许多连接也可能导致大型数据阵列。
继续使用上述方法,显然将数据写入文件并重新读取它不是很有效。因此,我正在寻找加快速度的方法。作为第一步,我使用 matplotlib 创建图像,但是至少在使用单独的绘图调用绘制每个棒时,对于更多数量的棒来说,速度会慢 10 倍。在数组中创建棒坐标列表并使用一次绘图调用绘制完整列表可能会加快速度,但仍然会留下写入和读取图像的瓶颈。
您能否指出一种有效的方法来直接生成表示棒的黑白图像的布尔型 numpy 数组?也许绘制坐标列表并以某种方式将图形转换为数组?我还发现了这个有趣的讨论,其中线条被绘制到 PIL 图像上。这可能比 matplotlib 快吗?
python - 在 Python 中:二维 numpy 数组中特定值区域的质心
我正在处理一系列numpy.ndarray
由 0.0 到 1.0 的 101x101 值。所有数组如下所示:
现在,假设我有一个threshold value=0.2
:我如何定位矩阵中的值的“区域”,从而在它们中超出阈值?在这种情况下,我会寻找值为>=0.2
.
特别是,我想:
- 计算超过的区域数
threshold value
; - 确定他们的
centers of mass
.
我知道我可以通过以下方式计算后者:ndimage.measurements.center_of_mass()
,但我看不到它如何仅应用于矩阵的“区域”而不是整个事物。
编辑
请考虑我所指的“区域”具有不规则的形状。
python - 在大数组(栅格)中选择大小过滤元素
我可能需要帮助:
在大型布尔 numpy 数组(导入栅格)(2000x2000)上,我尝试仅选择大于 800 个单位的元素。(总元素数 > 1000)
我尝试了一个循环:
但我确信有更好的方法来做到这一点。
python - Scipy ndimage median_filter 原点
我有一个二进制数组,比如说a = np.random.binomial(n=1, p=1/2, size=(9, 9))
. 我使用3 x 3
内核对其执行中值过滤,例如b = nd.median_filter(a, 3)
. 我希望这应该基于像素及其八个邻居执行中值滤波。但是,我不确定内核的位置。文件说,
原点:标量,可选。
如果默认值为零,则应该将当前像素和3 x 3
网格放在右侧和底部,不是吗?默认值不应该是中心footprint
吗?在我们的3 x 3
示例中,哪个对应(1, 1)
于(0, 0)
?
谢谢。
python - 从 URL 读取图像,使用 misc.imread 返回扁平数组而不是彩色图像
我正在尝试从 URL 读取图像(由 Google 的静态地图 API 提供)。
图像在浏览器中显示正常。
但是当我尝试使用 misc.imread 将它加载到数组中时,它似乎最终成为一个二维数组(即扁平化,没有 RGB 颜色)。
这是我正在使用的代码(我隐藏了我的 API 密钥):
我所期望的是一个 3-d 形状数组 (278, 256, 3)。
也许它没有正确读取文件?
python - 对象的尺寸沿维度?
我有一个 3D 标签矩阵。使用ndimage.sum
我可以获得标记的对象大小,这对于基于体积的过滤非常有用。我的问题是:例如,我能否轻松地获得沿每个轴的对象大小,以消除仅在一个平面上的对象?
一些代码可能会更清晰......
现在,不是用一维表示标记对象的体积,有没有办法让 3D 数组在每个维度上表示它们的表面?代表它们在每个平面上的表面的 30 维数组也可以,尽管我更喜欢第一个选项。
python - 想要检测拼图中的边角部分,但找不到每个部分的 4 个角
我有一个拼图游戏,想自动区分该拼图中的“正常”、“边缘”和“角”块(我希望这些词的定义对于曾经玩过拼图游戏的人来说是显而易见的)
为了使事情更容易,我从 9 个部分开始,其中 4 个是正常的,4 个是边缘,一个是角。原始图像如下所示:
我现在的第一个想法是检测每个单件的 4 个“主要角”,然后进行如下操作:
- 如果两个相邻“主要角”之间的轮廓是一条直线,则它是一条边
- 如果三个相邻“主要角”之间的两个轮廓是直线,则它是一个角
- 如果两个相邻的“主要角”之间没有直线,这是正常的部分。
但是,我在为每件作品提取四个“主要角”时遇到问题(我试图为此使用哈里斯角)
我的代码,包括一些预处理,附在下面,连同一些结果,包括我得到的哈里斯角。任何输入表示赞赏。
python - 用 scipy.ndimage.label 标记 3d numpy 数组
我有一个由 1 和 0 组成的大型 3d numpy 数组。我想使用 scipy.ndimage.label 工具来标记每个子阵列(2d)中的特征。
3d 数组的子集如下所示:
当我在这个子集的一小部分上使用标签工具时,它是正确的:
但是,当我使用整个子集时,标签工具无法正常工作:
任何想法如何解决这个问题?
附言。我试图标记的完整数组由 350219 个二维数组组成。