基于纸笔草图创建物理模拟
1. 圆形和线条检测
在之前的项目中,我们已经熟悉了一种检测圆形的技术,即把它当作斑点检测的特殊情况,使用 OpenCV 的 SimpleBlobDetector 类。该类允许我们指定许多检测标准,如斑点的大小、颜色和圆形度(或非圆形度,即线性度)。
不过,斑点是填充有纯色(或接近纯色)的形状,这意味着很多圆形或线性对象无法作为斑点被检测到。例如,在一张有瓷茶壶、瓷碗和锡碗的阳光照射的桌子的图片中,从俯视角度看,碗和茶壶盖有近似圆形的轮廓,但由于每个形状内部是多色的,尤其是在不均匀的光照下,它们不太可能作为斑点通过检测。
斑点检测从简单的阈值过滤器开始(将亮区标记为白色,暗区标记为黑色),而更通用的形状检测方法应从边缘查找过滤器开始(将边缘区域标记为白色,内部区域标记为黑色),然后进行阈值处理。边缘被定义为相邻不同亮度区域之间的不连续性,边缘像素一侧的相邻像素较暗,另一侧较亮。边缘查找过滤器通过从一侧减去相邻像素值,从另一侧加上相邻像素值,来测量像素在给定方向上的边缘对比度。为了实现与边缘方向无关的测量,我们可以应用多个过滤器(每个过滤器针对不同方向的边缘),并将每个过滤器的输出视为一个向量的维度,该向量的大小代表像素的整体边缘性。所有像素的一组这样的测量值有时被称为图像的导数。计算出图像的导数后,我们根据边缘所需的最小对比度选择一个阈值。高阈值只接受高对比度的边缘,低阈值也接受低对比度的边缘。
一个流行的边缘查找技术是 Canny 算法。OpenCV 的实现 Imgproc.Canny 函数同时执行过滤和阈值处理。它的参数包括灰度图像、输出图像、低阈值和高阈值。低阈值应接受
超级会员免费看
订阅专栏 解锁全文
1082

被折叠的 条评论
为什么被折叠?



