问题标签 [mathematical-morphology]

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 投票
1 回答
3071 浏览

image-processing - 图像膨胀和腐蚀的实现

我试图找出一种有效的方法来实现二进制图像的图像膨胀和腐蚀。据我了解,天真的方法是:

  • 循环遍历图像
  • 如果像素为 1
  • 根据结构元素的高度和宽度循环遍历邻域
  • (dilate) 将图像的每个像素替换为 SE 对应位置的值
  • (侵蚀)检查所有邻域是否等于 SE,如果是,则保留所有像素,否则删除中心

所以这意味着对于每个像素,我必须循环通过 SE 以及使其成为 O(N M W*H)。

有没有更优雅的方式来做到这一点?

0 投票
1 回答
85 浏览

c - 膨胀期间不需要的噪声元素

我正在对二元米粒图片应用膨胀操作。当使用的结构元素大小为 9x9 时,噪声粒子会变大,这是合乎逻辑的。但是当我使用大小为 15x15 的结构元素时,我会得到与原始噪声粒子相邻的新噪声粒子。这很令人困惑,因为我不知道为什么会这样。结构元素是一个全为 1 的 nxn 矩阵。图片已附上以供参考。

参考图片:
在此处输入图像描述

放大图像(9x9 SE):
在此处输入图像描述

放大图像(15x15 SE):
在此处输入图像描述 请帮助!

代码:

注意:SE 是指向我正在使用的掩码/SE 的指针。& m 对于 9x9 SE 是 9,对于 15x15 SE 是 15......

0 投票
1 回答
236 浏览

matlab - 计算图像边缘时出错

我正在尝试从图像中提取边缘。我使用了以下算法。还给出了 512 * 512 灰度图像的输入图像(e11)。

  1. 求输入图像的形态梯度(gradientim)
  2. 求梯度图像的负像(negativeim)
  3. 使用底帽变换(bottomhatim)从闭合图像中减去原始图像。
  4. 计算输入图像的平均像素(AVG)
  5. 找到基于 AVG 的二值图像,对图像进行平滑处理。
  6. 找到最大的连接区域以找到较大的对象(CC)。
  7. 从平滑后的图像(边缘)中减去最大区域。

我写的matlab代码如下

在此处输入图像描述

在执行第 7 步时,由于连接组件(CC)的类型是 'struct' ,我收到如下错误

“'struct' 类型的输入参数的未定义函数 'minus'”。

是否可以使用“bwconncomp”函数来查找最大的连接区域?是否有任何替代函数?请帮助我更正此代码。提前致谢。

0 投票
2 回答
957 浏览

python - 如何使用 FFT 卷积执行形态侵蚀

我尝试使用 FFT 卷积计算形态侵蚀。我知道腐蚀是膨胀的双重操作。第一个问题是我不能像往常一样使用 0 作为背景。所以我有偏见我的价值观。让 0.1 值表示背景,1.0 表示前景。将背景反转为前景并使用结构元素执行 FFT 卷积(使用 scipy.signal.fftconvolve)我得到了我无法进一步解释的结果。我知道我应该以某种方式阈值解决方案并再次反转。怎么做?

我的二维信号 A:

结构元素 B:

侵蚀(A,B):

使用 FFT 卷积,inv(A):

和乙:

结果如下:

接下来是什么?标准化/阈值然后反转?

此致

0 投票
0 回答
65 浏览

arrays - 在R中的数学形态运算“膨胀”代码中需要一些指导

我正在尝试对二值图像应用数学形态学运算。我试图应用的操作是扩张。我在下面发布代码。

上面是一个膨胀函数,它也调用了下面发布的翻译和联合函数。

下面的联合函数:

现在,当我尝试使用 mm_dilation 函数以数组形式处理图像时,我收到此错误:Error in mm_union(C, B) : binary operation on non-conformable arrays. 我的数组尺寸是

当我使用上面给出的下面给出的维度 TA 数组的子集时,代码在这种情况下有效。

所以我想知道如何改进它,以便它可以处理TA尺寸图像。

0 投票
0 回答
333 浏览

type-conversion - scikit-image 中的膨胀问题

我有一些边缘的图像:

边缘

我设法连接断开的白色边缘、骨架化、扩大一点边缘、裁剪和标记补码,所有这些都使用 scikit-image 中的形态学操作。

下面是裁剪和标记的图像。添加了颜色条以显示范围。 在此处输入图像描述

现在我想再次使用膨胀来消除黑边(我知道厚度,因为我之前使用disk(3).

我试过了dilated = dilation(cropped, disk(4))

但我收到此错误消息:

我不确定我是否理解。由于范围是 0-4,我预计没有负值。如果我跑,print cropped.min(), cropped.max()我会得到0 4

任何人都可以提出问题是什么以及是否有任何解决方法?

0 投票
2 回答
134 浏览

c++ - 如何在 IR 中表示数学域?

我想从约束列表中定义一个表示数学域的对象,但我对如何做到这一点没有明确的想法。

例如,我从 IR 开始,我有以下约束:

  • x > 0
  • x 不在]3,5]
  • x 不在 [7,12[

然后,我的域是 ]0,3] U ]5,7[ U [12,+oo 。

我怎样才能很好地将它存储在 C++ 结构中?你以前做过吗?此外,如果域为空,我希望能够轻松检查。

0 投票
1 回答
5466 浏览

python - OpenCV 打开/关闭移动像素的位置

我目前正在使用 OpenCV 2.4 对二进制图像进行形态转换

我刚刚注意到,使用 OpenCV 的内置函数,我所有像素的位置都向右和向下移动了一个(即以前位于 (i,j) 的像素现在位于 (i+1, j+1) )

输入 :

输入

输出 :

open_opencv

由于我不明白为什么,我只是使用 skimage 绑定了相同的操作,并且在形态转换过程中并没有产生这种“间隙”。

输出:

open_skimage

关于这个问题的任何想法?

谢谢 !

0 投票
2 回答
2307 浏览

python - 试图改进我在 OpenCV 中的道路分割程序

我正在尝试制作一个能够识别场景中的道路并继续使用形态过滤和分水岭算法的程序。但是,该程序会产生平庸或糟糕的结果。如果道路占据了大部分场景,它似乎还可以(通过不够好)。然而在其他图片中,事实证明天空被分割了(云的分水岭)。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我试图看看我是否可以进行更多的图像处理以改善结果,但这是我迄今为止最好的,不知道如何继续改进我的程序。

如何改进我的程序?

代码:

0 投票
2 回答
15656 浏览

python - Python Opencv 形态关闭给出 src 数据类型 = 0 不支持

我正在尝试使用由函数创建的球结构元素在形态上关闭体积SE3 = skimage.morphology.ball(8)。使用closing = cv2.morphologyEx(volume_start, cv2.MORPH_CLOSE, SE)时返回 TypeError: src data type = 0 is not supported 你知道如何解决这个问题吗?谢谢