问题标签 [image-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 回答
175 浏览

imagemagick - 为什么 Imagemagick 的形态膨胀算法与数学定义不同?

原始图像

生成者:

膨胀过程

使用一个 2x1 矩形作为中心点 (0,0) 的内核:

处理者:

预期产出

实际输出

问题

为什么输出出乎意料?我想知道 ImageMagick 如何处理膨胀。

以下是我的理解:

当内核的中心点迭代到原图的位置(0,1)时:

我认为 (0,1) 应该1在 AND 操作之后。

0 投票
1 回答
2471 浏览

python - 自定义腐蚀结果与 OpenCV 腐蚀不匹配

我是图像处理的新手,正在尝试编写用于腐蚀和膨胀的自定义方法。然后我尝试将我的结果与 OpenCV 腐蚀和膨胀函数结果进行比较。我给输入图像填充一个零,然后将内核与填充图像重叠。这是我的功能:

膨胀结果匹配,但腐蚀结果不匹配。我不确定为什么会这样。是因为一些填充问题吗?OpenCV 是否填充图像?还是我错误地执行了腐蚀方法?这是结果的图像:

最终结果

0 投票
2 回答
2889 浏览

python - 仅在一个方向上使用膨胀?

这是我在 Stack Overflow 上的第一篇文章,如果问题没有得到足够的定义,我很抱歉。

我目前正在从图像中提取表格数据,我需要一种仅在垂直方向上扩展文本的方法,以便获得清晰的列表示,用于进一步分割。

去除水平和垂直线并按位变换图像后,我处于这个阶段:

扩张和线提取后的当前状态

这个问题的理想目标是:

目标

有没有对我的情况有帮助的方法或算法?

0 投票
2 回答
239 浏览

python - 如何从 opencv 的 morhpologyEx 获得关于图像边界的预期行为?

我正在使用 opencv(版本 4.1.0,带有 Python 3.7)对二进制图像执行形态关闭。使用大的关闭内核时,我遇到了边界问题。

我的代码是:

我读了这个问题这个问题,还有文档,这导致我也尝试 像这样改变borderValue论点morphologyEx()

但是这两种方法都不会导致我想要的。我在下图中总结了他们的行为。

在此处输入图像描述

我的原始图像在顶部。我期望的行为是两个点对于小内核(例如,内核 = 1)保持分离,并为足够大的内核合并在一起。
如您所见,对于默认边界(图像的左列),当 kernel = 6 时合并是正确的,但是一旦它变大,点就开始与边界合并。
使用恒定的边界(图像的右列),可以使用更大的内核,但是对于非常大的内核(例如内核 = 20),仍然会发生意外行为,其中点消失。

关闭内核作为最终软件中的用户参数保留,以便能够合并可能非常远的点。所以理想情况下,我需要能够处理比对象和边界之间的距离更大的平滑内核。

原图: 在此处输入图像描述

0 投票
1 回答
66 浏览

python - 使用 OpenCV 保持图像中线条的“连通性”

我正在研究手写数字识别问题,使用 OpenCV 进行预处理,使用 Keras/Tensorflow 进行推理。我在预处理中丢失某些功能时遇到问题,这些功能大致包括:

  1. 大津门槛
  2. 膨胀(使数字厚度与我用来预训练神经网络的另一个数据集相同)
  3. 使用 cv2.INTER_AREA 缩小到 28x28 像素(再次匹配预训练数据)

这是一个特征损失的例子:

在此处输入图像描述

这意味着是一个 2,顶部循环中的微小间隙对于帮助将其与 9 或 8 区分开来很重要。但是我的预处理版本失去了间隙,所以循环看起来是封闭的。

我已经问过一个类似的问题来保留漏洞并得到了很好的答案,尽管我认为我需要对其进行更多概括。

就像我自己的一个想法一样:也许有一种方法可以在膨胀操作中添加第二个更大的内核。该内核将具有与膨胀内核相同的形状,但只有轮廓(未填充)。然后,如果该轮廓触及原始图像中的任何白色像素,则取消该位置的膨胀动作。

注意:请随意发表评论,以更好的方式提出该标题(“连通性”是我能想到的全部)。

0 投票
1 回答
1383 浏览

python - 从图像中提取水平线和垂直线

我想为附加图像提取 2 个蒙版中的水平线和垂直线。

我已经尝试过形态学操作来做到这一点,

但问题是,它将线检测为矩形,然后以 2 条线的形式绘制它,代表矩形的 2 条边。

有什么想法可以解决这个问题吗?

图片:
图像

水平结果:

H

垂直结果:

v


编辑:这是我的另一张图片:

图像

0 投票
1 回答
489 浏览

python - 自适应灰度膨胀实现

给定一个值从 0 到 的 2D 数组n,我想通过每个像素包含的值来扩展每个像素,较高的值应该在扩张期间覆盖较低的值。

也就是说,半径内与像素值相等的任何像素,如果它们的值较小,则继承​​该值。例如,如果输入为[0 1 0 2 0 0],则输出为[1 2 2 2 2 2 ]

这怎么可能实现?

0 投票
2 回答
262 浏览

python - 删除二值图像中的单个像素

假设我有一个二进制图像,表示为一个numpy矩阵,其中一个像素是背景 (0) 或前景 (1)。我正在寻找一种方法来删除前景中没有任何最近邻居的所有像素。

假设,图像矩阵为:

单像素删除后的结果图像应该是

到目前为止,我的方法是对所有可能的方向进行开口组合:

另一种方法是标记连接的组件并按索引删除它们,但是当涉及到计算复杂性时,这些解决方案感觉不是最佳的。

0 投票
1 回答
457 浏览

python - 使用形态学运算计算圆

我有一张图片,要求我计算圆圈的数量。我能够将其简化为这张图片:

在此处输入图像描述

现在我可以使用连接组件的数量来得到答案。没关系。但是是否有可能只使用形态学操作来做到这一点?(就像以某种方式获得这些“圆圈”的“中心”,然后简单地计算像素)

0 投票
1 回答
408 浏览

python - 形态闭合的迭代

我有一个像这样的代码:

我得到以下输出:

关闭块1:

关闭块1

关闭块2:

关闭块2

但后来我看到了这个。它说:

根据冈萨雷斯的“数字图像处理,第 3 版”,开/关的多次应用在您第一次应用后没有任何效果!

但这不是我得到的结果。我得到 1 对 3 次迭代,并得到不同的结果。我做错了什么或误解了什么?