问题标签 [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.
image-processing - 图像膨胀和腐蚀的实现
我试图找出一种有效的方法来实现二进制图像的图像膨胀和腐蚀。据我了解,天真的方法是:
- 循环遍历图像
- 如果像素为 1
- 根据结构元素的高度和宽度循环遍历邻域
- (dilate) 将图像的每个像素替换为 SE 对应位置的值
- (侵蚀)检查所有邻域是否等于 SE,如果是,则保留所有像素,否则删除中心
所以这意味着对于每个像素,我必须循环通过 SE 以及使其成为 O(N M W*H)。
有没有更优雅的方式来做到这一点?
c - 膨胀期间不需要的噪声元素
我正在对二元米粒图片应用膨胀操作。当使用的结构元素大小为 9x9 时,噪声粒子会变大,这是合乎逻辑的。但是当我使用大小为 15x15 的结构元素时,我会得到与原始噪声粒子相邻的新噪声粒子。这很令人困惑,因为我不知道为什么会这样。结构元素是一个全为 1 的 nxn 矩阵。图片已附上以供参考。
参考图片:
放大图像(9x9 SE):
放大图像(15x15 SE):
请帮助!
代码:
注意:SE 是指向我正在使用的掩码/SE 的指针。& m 对于 9x9 SE 是 9,对于 15x15 SE 是 15......
matlab - 计算图像边缘时出错
我正在尝试从图像中提取边缘。我使用了以下算法。还给出了 512 * 512 灰度图像的输入图像(e11)。
- 求输入图像的形态梯度(gradientim)
- 求梯度图像的负像(negativeim)
- 使用底帽变换(bottomhatim)从闭合图像中减去原始图像。
- 计算输入图像的平均像素(AVG)
- 找到基于 AVG 的二值图像,对图像进行平滑处理。
- 找到最大的连接区域以找到较大的对象(CC)。
- 从平滑后的图像(边缘)中减去最大区域。
我写的matlab代码如下
在执行第 7 步时,由于连接组件(CC)的类型是 'struct' ,我收到如下错误
“'struct' 类型的输入参数的未定义函数 'minus'”。
是否可以使用“bwconncomp”函数来查找最大的连接区域?是否有任何替代函数?请帮助我更正此代码。提前致谢。
python - 如何使用 FFT 卷积执行形态侵蚀
我尝试使用 FFT 卷积计算形态侵蚀。我知道腐蚀是膨胀的双重操作。第一个问题是我不能像往常一样使用 0 作为背景。所以我有偏见我的价值观。让 0.1 值表示背景,1.0 表示前景。将背景反转为前景并使用结构元素执行 FFT 卷积(使用 scipy.signal.fftconvolve)我得到了我无法进一步解释的结果。我知道我应该以某种方式阈值解决方案并再次反转。怎么做?
我的二维信号 A:
结构元素 B:
侵蚀(A,B):
使用 FFT 卷积,inv(A):
和乙:
结果如下:
接下来是什么?标准化/阈值然后反转?
此致
arrays - 在R中的数学形态运算“膨胀”代码中需要一些指导
我正在尝试对二值图像应用数学形态学运算。我试图应用的操作是扩张。我在下面发布代码。
上面是一个膨胀函数,它也调用了下面发布的翻译和联合函数。
下面的联合函数:
现在,当我尝试使用 mm_dilation 函数以数组形式处理图像时,我收到此错误:Error in mm_union(C, B) : binary operation on non-conformable arrays
. 我的数组尺寸是
当我使用上面给出的下面给出的维度 TA 数组的子集时,代码在这种情况下有效。
所以我想知道如何改进它,以便它可以处理TA
尺寸图像。
type-conversion - scikit-image 中的膨胀问题
我有一些边缘的图像:
我设法连接断开的白色边缘、骨架化、扩大一点边缘、裁剪和标记补码,所有这些都使用 scikit-image 中的形态学操作。
下面是裁剪和标记的图像。添加了颜色条以显示范围。
现在我想再次使用膨胀来消除黑边(我知道厚度,因为我之前使用disk(3)
.
我试过了dilated = dilation(cropped, disk(4))
但我收到此错误消息:
我不确定我是否理解。由于范围是 0-4,我预计没有负值。如果我跑,print cropped.min(), cropped.max()
我会得到0 4
任何人都可以提出问题是什么以及是否有任何解决方法?
c++ - 如何在 IR 中表示数学域?
我想从约束列表中定义一个表示数学域的对象,但我对如何做到这一点没有明确的想法。
例如,我从 IR 开始,我有以下约束:
- x > 0
- x 不在]3,5]
- x 不在 [7,12[
然后,我的域是 ]0,3] U ]5,7[ U [12,+oo 。
我怎样才能很好地将它存储在 C++ 结构中?你以前做过吗?此外,如果域为空,我希望能够轻松检查。
python - OpenCV 打开/关闭移动像素的位置
我目前正在使用 OpenCV 2.4 对二进制图像进行形态转换
我刚刚注意到,使用 OpenCV 的内置函数,我所有像素的位置都向右和向下移动了一个(即以前位于 (i,j) 的像素现在位于 (i+1, j+1) )
输入 :
输出 :
由于我不明白为什么,我只是使用 skimage 绑定了相同的操作,并且在形态转换过程中并没有产生这种“间隙”。
输出:
关于这个问题的任何想法?
谢谢 !
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 你知道如何解决这个问题吗?谢谢