0

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

我想知道如何存储边缘的信息并检查用户是否达到了边缘。如果有人可以提供一些关于相同的指导方针,那将非常有帮助。

谢谢

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

在此处输入图像描述

4

1 回答 1

3

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

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

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

查看 Canny 边缘检测器。它的滞后步骤有助于连接具有弱点的边缘。输出是二值图像 - 边缘或无边缘。

一旦你有了一个边缘图像,你可以填充背景,将图像分成一组不连贯的前景元素。然后使用区域标注算法给每个前景元素一个唯一的标签。当用户开始绘画时,记录他们在哪个区域内,然后将绘画限制在该区域。

这个过程高度依赖于边缘检测图像的质量。如果 Canny 检测器无法用边缘完全包围一个区域,它将会非常失败。

于 2012-07-03T23:11:18.333 回答