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

algorithm - 数蜥蜴的鳞片

我的一个生物学家朋友问我是否可以帮助他编写一个程序来计算蜥蜴的鳞片(这是正确的翻译吗?)。

他给我发了一些图片,我在 Matlab 上尝试了一些东西。对于某些图像,它比其他图像更难,例如当有较暗(黑色)区域时。至少按照我的方法。我相信我可以在这里得到一些有用的帮助。我应该如何改进这一点?我采取了正确的方法吗?

这些是一些图像。

图1

图2

通过使用 MATLAB进行图像处理和计数,我得到了最好的结果。它基本上是将图像变成黑白,然后对其进行阈值处理。但我确实添加了一些侵蚀。

这是代码:

这些是一些结果。一个左上角你可以看到有多少被计算在内。

另外,我认为将计数元素标记为绿色很有用,这样至少用户可以知道哪些元素必须手动计数。

在此处输入图像描述

0 投票
1 回答
1015 浏览

image-processing - 为什么同一个内核的多次打开/关闭没有效果?

我知道关闭和打开,但我还有一个问题!根据冈萨雷斯的“数字图像处理,第 3 版”,开/关的多次应用在第一次应用后没有任何效果!我想不通?任何人都可以帮忙吗?

0 投票
1 回答
238 浏览

python - 使用python来挑选图像中对象上不同部分的形态

我有一个图像分析/形态学问题,我需要一个基于 python 的解决方案。我是一名天文学家,试图从我的图像中掩盖宇宙射线轨迹(从 1 到 100 像素长的条纹)。我使用带有阈值的过滤技术挑选出曲目。它工作得很好,除非轨道碰到一个物体(恒星或星系)。正如您在下面看到的那样,我的轨迹上出现了斑点(如左图中的那个)和环(如右图中的那个)。

明星旁边的条纹 穿越银河

在这些图像中,您可以忽略波浪线和“X”,黑框是我的蒙版像素。我想做的是将轨道(长条纹)与斑点和环分开(仅供参考,环出现是因为过滤提高了对象边缘的重要性)。所以我的问题是如何对面具某些部分的形态进行分类并将斑点/环与轨道分开。

如果这样可以更容易地回答问题,这里是左侧图像的掩码:

理想情况下,我希望掩盖轨道,并且当它们与对象完全相交时,如右图所示,我想掩盖整个轨道,穿过对象,而不掩盖对象中不受影响的部分由轨道。所以我希望最终的蒙面结果看起来像这里显示的白色轨道:

想要明星面具 想要银河面具

谢谢!-亚当

0 投票
1 回答
2201 浏览

image-processing - 二值和灰度图像的腐蚀/膨胀

我正在尝试找出二进制和灰度图像的侵蚀和膨胀之间的区别。

据我所知,这是二进制图像的腐蚀/膨胀......

侵蚀:如果SE索引对应的每个像素为1,则输出1。否则为0。

Dilation:如果与具有 1 的 SE 索引对应的至少一个像素为 1,则输出 1。否则为 0。

我的问题是,这对 16 位 (0, 65535) 灰度图像有何作用?

0 投票
1 回答
76 浏览

computer-vision - 从图像中提取石头

关于从这样的图像中提取石头的算法有什么想法吗?

石头 http://www.highdesertlapidary.com/media/5/a2079181363c96d4d9c754_s.JPG

石头都是不同的颜色。我需要将它们与背景和可能存在的任何标尺分开。

谢谢你。

0 投票
1 回答
224 浏览

image-processing - 二元腐蚀查询

我查看了这个链接:http ://en.wikipedia.org/wiki/Erosion_(morphology)#Grayscale_erosion

我可以理解,当您使用该结构元素查看像素时,原点周围的所有像素值都必须为 1,以便相关像素为 1。

但是,如果我的结构元素是:这种二元侵蚀将如何工作:

重新表述这个问题。位于十字架上的每个像素是否都需要为 1 才能使相关的原始像素为 1?

0 投票
1 回答
848 浏览

image-processing - Matlab,找到两个任意区域的交集

我有两个二进制图像,A 和 B(A 和 B 大小相同但对象不同)。每个图像中有许多区域。现在我想找到 A 中任何区域的邻居。我在 matlab 中使用 imdilate - 膨胀函数。因为扩张后 A 的区域会增加,所以这可能与 B 中的区域相连。我将 B 的区域添加到 A 并继续这样做。当我们无法将 B 的任何区域添加到 A 时,我将停止。

我不知道如何编码?你能帮助我吗。太感谢了 ?计算会花费很多时间吗?

0 投票
2 回答
1295 浏览

python - Scipy ndimage 形态运算符使我的计算机内存 RAM (8GB) 饱和

我需要使用半径为 17 或更大的 3D 结构元素计算 3D 形状数组 (400,401,401) 的形态开口,大小为 64320400 字节。结构元素 ndarray 的大小为 42875 字节。使用scipy.ndimage.morphology.binary_opening,整个过程消耗 8GB RAM。

我在 GitHub 上读过scipy/ndimage/morphology.py,据我所知,形态侵蚀算子是用纯 C 实现的。我很难理解ni_morphology.c源代码,所以我没有找到这段代码的任何部分导致这种情况巨大的内存利用率。添加更多 RAM 不是一个可行的解决方案,因为内存使用量可能会随着结构元素半径呈指数增长。

要重现问题:

这需要大约 7GB RAM。

有人对上述示例中如何计算形态学有一些建议吗?

0 投票
1 回答
1078 浏览

matlab - 使用 Matlab 进行形态学操作

这是问题所在:

照相机拍摄了I位于白色背景上的一分钱、一角硬币和四分之一硬币的图像,并且硬币不重叠。假设阈值B处理成功创建了一个二进制图像,硬币区域为 1,背景为 0。

d_p给定硬币、d_d和以像素为单位的已知直径d_q(注意d_d < d_p < d_q)。如何使用形态学运算(膨胀、腐蚀、开运算和闭运算)以及逻辑和集合运算(AND、OR、NOT 和集合差)来生成三个二进制输出图像PDQ,其中P应该只包含一分钱,D应该只包含一角钱,Q应该只包含四分之一?

任何人都可以提供代码或一些提示吗?提前致谢!

0 投票
1 回答
431 浏览

matlab - 形态骨骼看起来很奇怪

我已经实现了形态骨架化以从图片中获取数字骨架。有 8 个结构元素要与像素的邻域进行比较。如果某些条件为真,则删除前景像素。重复此过程,直到不再删除像素,输出是输入的骨架。

我的实现的输出看起来不错,但看起来不如 Matlab 函数 bwmorph 的输出好。我的输出中有一些小行,我想将其删除。看看我链接到这篇文章的两张图片。Matlab 版本在我看来比我的版本“更清晰”。

我听说过“修剪”以摆脱那些小线条。但这些算法看起来相当复杂。有没有一个简单的解决方案来摆脱这些线条?或者是否有一些 Matlab 内置函数来删除这些行?

图片:

我自己的实现:

MATLAB: