我正在开发一个应用程序,帮助用户有效地绘画。我有一个C#代码,它运行一个matlab脚本,并获得一个参考图像的边缘检测黑白图像。现在,我已经开发了代码,可以让用户在图像上绘画。我的任务是引导用户在这个图像上作画。本质上,当用户绘画时,我的任务是查看黑白边缘检测图像上的绘画不会穿过边缘。我应该能够检测到,当画笔越过一条边时,它应该在那条边上被切断。
我想知道如何存储边的信息,并检查用户是否遇到了边。如果有人能提供一些关于这方面的指导方针,那将是非常有帮助的。
谢谢
编辑:我已经上传了一张参考图像及其边缘检测图像。在边缘检测图像上完成绘画。
发布于 2012-07-04 07:11:18
看起来你的边缘检测器有问题,因为它为每个边缘生成了一对线。
你的目标check if the user has hit an edge
意味着你需要一个绝对的决策优势或没有优势。但是像Sobel这样的边缘检测运算符会为0,255范围内的每个像素提供一个“边缘”值。所以你需要更多的处理才能做出这个绝对的决定。
简单地对Sobel输出进行阈值处理容易产生噪声。例如,如果在锐边前面有一个小的失焦对象,它可能会使该点的边缘非常弱。
查看Canny Edge Detector。它的滞后步骤有助于连接有弱点的边缘。输出是二进制图像-边缘或无边缘。
一旦有了边缘图像,就可以对背景进行整体填充,将图像分成一组不相连的前景元素。然后使用Region labeling algorithm为每个前景元素提供唯一的标签。当用户开始绘制时,记录他们所在的区域,然后将绘制限制在该区域。
这一过程高度依赖于边缘检测图像的质量。如果Canny检测器不能完全封闭一个带有边缘的区域,它将失败得惊人。
https://stackoverflow.com/questions/11319937
复制相似问题