使用 函数 cv:: 执行一些拉普拉斯滤波以进行图像锐化
获得二值图像的派生()表示, 要使用函数cv::, 在其中用每个像素到最近背景像素的距离替换该像素的值, 得到相应表示。
使用 函数 cv:: 将图像中的对象与背景隔离
加载源图像并检查它是否加载没有任何问题,然后显示它:
# Load the image
这似乎并不是一个完整且清晰表意合理的句子呀, 请你检查一下输入内容, 以便我能更准确地按照要求进行改写。
code how to using , \
in to and ')
在代码中, 存在一个参数设置, 其参数名为'--input', 它具有帮助说明的属性, 该帮助说明内容是'Path to input image.', 并且这个参数当前被赋值为'cards.png'。
args = .()
src = cv.(cv..(args.input))
if src is None:
exit(0)
# Show image
cv.(' Image', src)
把背景由白色改成黑色, 鉴于如此会对稍后于运用距离变换()之际, 助力提取更优的结果。
src
np.all(src == 255, axis=2)
= 0
在那之后, 把我们的图像加以锐化这个行动, 是为了让前景对象的边缘得以呈现出锐化的样子。而我们会运用一种拉普拉斯过滤器, 它有着相当强的过滤功能, 是跟二阶导数近似值相关的那种过滤器:
锐化处理的主要目的在于突出灰度的过度部分, 因为拉普拉斯是一种微分算子, 要是所使用的定义具备负的中心系数, 那就必须把原图像减去经拉普拉斯变换后的图像, 而非加上它, 如此方能获得锐化结果。----摘自《数字图像处理(第三版)》。
现在我们将新的锐化源图像分别转换为灰度和二值图像():
# image from image
bw = cv.(, cv.)
cv.(' Image', bw)
此刻, 我们正打算于二值图像(image)之上施行距离变换操作。另外, 我们会将输出图像予以归一化处理, 以此能够对结果开展可视化以及阈值处理工作。
用法
cv.( src, , )
src:输入图像,数据类型为CV_8U的单通道图像
dst, 是输出图像, 它和输入图像有着一样的尺寸, 其数据类型是CV_8U, 同时它是单通道图像, 就是这样。
选用用来计算两个像素之间距离方式的标志, 其常见的距离度量方式, (等于横坐标差值绝对值加上纵坐标差值绝对值的街区距离), (欧几里得距离, 也就是欧式距离)。
距离变换掩码矩阵的大小方面, 参数能够选择的尺寸是这样的, 有一种尺寸是(3×3), 还有一种尺寸是(5×5)。
我们针对dist图像开展阈值处理, 接着施行一些形态学操作, 也就是膨胀, 以此从先前所述图像里提取峰值。
咱们从每一个 blob 里面, 借助 cv:: 函数, 给分水岭算法制造出一个种子, 或者说是一个标记。
最后,我们可以应用分水岭算法,并将结果可视化:
之后会继续分享技术,欢迎大家学习交流~
原文链接: