- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
函数scipy.ndimage.laplace可用于计算应用于 N 维数组的拉普拉斯算子。如果要使用此功能,例如,用于物理应用,关键部分通常是如何处理边界。
查看函数文档,支持的选项有很多:
我个人缺少的一件事是“平稳延续” 选项。在上面的表示法中,它将对应于镜像选项的一个稍微修改的版本:
这样做的动机是不在边界处引入扭结,所有支持的选项似乎都是针对任意输入做的。
问题:在scipy/numpy中有什么办法可以做这个拉普拉斯运算吗?
最佳答案
我深入研究了 scipy 源代码。我的发现让我认为仅使用 python scypi/numpy 添加您的自定义模式并不容易:您最终将在 python 中重新编码 scipy 的大部分主干代码。
您所指的模式深入到底层 scipy 的 C 代码中进行管理。您将需要更改 C 枚举值,根据您的自定义模式逻辑更新源文件,并生成一个新包。
这可能是要在 github 上打开的问题/演变:要么允许自定义构建数组方法,要么实现新模式。或者每人一张票。
参见 here .引用:
/* Extend a line in memory to implement boundary conditions: */
int NI_ExtendLine(double *buffer, npy_intp line_length,
npy_intp size_before, npy_intp size_after,
NI_ExtendMode extend_mode, double extend_value)
{
double *first = buffer + size_before;
double *last = first + line_length;
double *src, *dst, val;
switch (extend_mode) {
/* aaaaaaaa|abcd|dddddddd */
case NI_EXTEND_NEAREST:
src = first;
dst = buffer;
val = *src;
while (size_before--) {
*dst++ = val;
}
src = last - 1;
dst = last;
val = *src;
while (size_after--) {
*dst++ = val;
}
break;
/* abcdabcd|abcd|abcdabcd */
case NI_EXTEND_WRAP:
src = last - 1;
dst = first - 1;
while (size_before--) {
*dst-- = *src--;
}
src = first;
dst = last;
while (size_after--) {
*dst++ = *src++;
}
break;
/* abcddcba|abcd|dcbaabcd */
case NI_EXTEND_REFLECT:
src = first;
dst = first - 1;
while (size_before && src < last) {
*dst-- = *src++;
--size_before;
}
src = last - 1;
while (size_before--) {
*dst-- = *src--;
}
src = last - 1;
dst = last;
while (size_after && src >= first) {
*dst++ = *src--;
--size_after;
}
src = first;
while (size_after--) {
*dst++ = *src++;
}
break;
/* cbabcdcb|abcd|cbabcdcb */
case NI_EXTEND_MIRROR:
src = first + 1;
dst = first - 1;
while (size_before && src < last) {
*dst-- = *src++;
--size_before;
}
src = last - 2;
while (size_before--) {
*dst-- = *src--;
}
src = last - 2;
dst = last;
while (size_after && src >= first) {
*dst++ = *src--;
--size_after;
}
src = first + 1;
while (size_after--) {
*dst++ = *src++;
}
break;
/* kkkkkkkk|abcd]kkkkkkkk */
case NI_EXTEND_CONSTANT:
val = extend_value;
dst = buffer;
while (size_before--) {
*dst++ = val;
}
dst = last;
while (size_after--) {
*dst++ = val;
}
break;
default:
PyErr_Format(PyExc_RuntimeError,
"mode %d not supported", extend_mode);
return 0;
}
return 1;
}
请注意,我绝对不是 scipy 方面的专家,所以也许我遗漏了一些重要的东西,或者有非常有据可查的原因来解释建议的模式。
编辑 2019-Ap-24 一些 documentation here我没有得到所有的细节,但据我了解:
This ticket还处理新模式。
鉴于门票的开放日期,它可能需要一些时间才能到来。
关于python - scipy.ndimage.laplace 中的边界模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689542/
当我尝试执行以下操作时,它显示未定义的名称“ndimage”: import scipy.ndimage blurred = ndimage.gaussian_filter(file1, sigma
我使用 sudo pip3 install scipy 安装了 ndimage 然后我将其导入为 import scipy.ndimage 然后我正在执行以下行b=scipy.ndimage.filt
我有一个存储为 ndarray 的图像。我想遍历这个数组中的每个像素。 我可以像这样遍历数组的每个元素: from scipy import ndimage import numpy as np l
我正在尝试学习 ndimage,但我不知道如何做 generic_filter()功能有效。文档提到用户功能将应用于用户定义的足迹,但不知何故我做不到。这是示例: >>> import numpy a
我有一个大图像,在标记后有大约 500 个特征。我知道如何使用 find_object 将它们放入切片中,但我想给它们上色以便看到结果。对此有什么快速建议吗? 最佳答案 您可以像这样使用 matplo
我只是想熟悉 scipy.ndimage,我无法弄清楚 interpolate.convolve 和 interpolate.correlate 有何不同。 In [24]: a Out[24]: a
有没有办法在 Scipy 中为图像处理定义自定义过滤器?我需要一个过滤器,给定位于像素 i、j 的结构元素,它将该像素的值分配给该结构元素覆盖的所有其他像素。 编辑:滤镜类似于形态学滤镜,如侵 ecl
我尝试从 SciPy 导入 ndimage 包以使用其中的最大过滤器。但是,SciPy 似乎缺少这一部分。我收到此错误: from scipy.linalg import _fblas ImportE
已关注 How exactly does the “reflect” mode for scipys ndimage filters work?和 Numpy Two-Dimensional Movi
我正在尝试做的事情: 用 python 读取图像。 使用 Scipy 的 ndimage.gaussian_filter() 函数应用高斯滤波器。 显示生成的图像。 这是我要运行的代码: import
我想填充该图像的中心点,以便末端是白色,其余部分是黑色。我正在尝试使用 ndimage.binary_fill_holes 来完成此操作(代码如下)。当我运行脚本时,收到错误'NoneType' ob
虽然我已经找到了关于 scipy.ndimage.convolve 函数的文档并且我“几乎知道它做了什么”,但当我尝试计算结果数组时我无法遵循数学公式。让我们举个例子: a = np.array([[
我正在尝试编写一个 python 函数来删除 2D 图像数据中的热像素。我正在尝试创建一个函数,该函数将获取 2D 数组中每个元素周围的邻居的平均值,并且如果该元素的值超过其邻居的平均值特定量(例如
函数scipy.ndimage.laplace可用于计算应用于 N 维数组的拉普拉斯算子。如果要使用此功能,例如,用于物理应用,关键部分通常是如何处理边界。 查看函数文档,支持的选项有很多: “反射(
我尝试使用 ndimage.measurements.center_of_mass 计算高斯二维分布的峰值位置,发现质心从峰值中心偏移: import numpy as np from scipy i
我有一个二进制数组,比如说,a = np.random.binomial(n=1, p=1/2, size=(9, 9))。我使用 3 x 3 内核对其执行中值过滤,比如 b = nd.median_
我注意到 scipy.ndimage.zoom 的结果取决于原始图像的大小。在以下代码示例中,生成了一个棋盘图像,然后使用 ndimage.zoom 对其进行了缩放。如果一个棋盘图 block 只有
背景/背景 我试图重现 scipy 的 ndimage.affine_transform 输出的值函数,但与 scipy 实现相比,我似乎使用了不同的“三次”插值方案。 例子 让我们来看一个非常简单的
这个问题已经有答案了: scipy.misc module has no attribute imread? (18 个回答) 已关闭去年。 我正在尝试从 scipy 读取图像。但它给出错误“没有属性
我有一个二值图像。二值图像有一些孤立的区域,如噪声。我知道预期区域比这些孤立区域大得多。因此,我使用连接的组件通过找到最大的连接区域来删除隔离区域。我必须使用 scipy 包。我发现它有一些功能可以做
我是一名优秀的程序员,十分优秀!