C#在边缘内绘制图像

时间:2012-07-03 22:12:51

标签: c# matlab paint edge-detection

我正在开发一个帮助用户有效绘画的应用程序。我有一个C#代码,它运行一个matlab脚本,并获得边缘检测参考图像的黑白图像。现在,我开发了可以让用户在图像上绘画的代码。我的任务是引导用户绘制此图像。基本上,当用户绘画时,我的任务是看到黑色和白色边缘检测图像上的绘画不会越过边缘。我应该能够检测到当油漆行程越过边缘时,它应该在该边缘被切断。

我希望了解如何存储边缘信息并检查用户是否已达到优势。如果有人可以就此提供一些指导,那将非常有用。

由于

已编辑:我上传了一个参考图像及其边缘检测图像。绘画是在边缘检测图像上完成的。

enter image description here

1 个答案:

答案 0 :(得分:3)

边缘检测器看起来有问题,因为它为每条边生成一对线。

您的目标check if the user has hit an edge意味着您需要一个绝对的决定 - EDGE或NO EDGE。但像Sobel这样的边缘检测算法会为[0,255]范围内的每个像素提供“锐度”值。所以你需要更多的处理来做出这个绝对的决定。

简单地对Sobel输出进行阈值处理很容易产生噪音。例如,如果在锐边前面有一个小的离焦物体,那么它可能会使边缘非常弱。

查看Canny Edge Detector。其滞后步骤有助于连接具有弱点的边缘。输出是二进制图像 - 边缘或无边缘。

获得边缘图像后,可以对背景进行泛光填充,将图像分离为一组断开连接的前景元素。然后使用Region labeling algorithm为每个前景元素赋予唯一标签。当用户开始绘画时,记录它们所在的区域,然后限制绘画到该区域。

此过程高度依赖于边缘检测图像的质量。如果Canny探测器未能完全包围一个有边缘的区域,那么它将会非常失败。

相关问题