以编程方式制定图像大纲(最好是C#/ C ++编码,或伪编码)

我想向逻辑上的任何人请求帮助,以及制定图像轮廓的更好的示例代码。

为了更清楚,我说的是一个透明的图像。 比方说,我有一个中间有多边形的PNG图像,或者更好的岛屿顶视图。 现在,我想跟踪轮廓并在其上设置颜色。 就像Adobe Photoshop中的效果’笔画’一样。

我已经完成了那么多,我已经创建了一个跟踪轮廓的程序。 但我的问题是,它是线性扫描。 从左到右,然后向下,然后再从左到右。 我相信你明白了。 我希望跟踪流动,就像你手动跟踪它一样。 跟你一样跟踪圈子。

其目的是将其用作精确hover多边形的触发区域。 而且我的问题是,例如,有两个岛。

我希望我的疑问很明确。 任何建议,样品都表示赞赏。 但如果它是ac#代码forms或伪代码并有一些解释,那就更好了。

非常感谢提前。

– 增加:

此外,我想(我想我已经忘记提及)以顺序方式记录笔画的坐标。 所以我以后可以操纵它们。 这就是为什么我想以流动的方式制作概述逻辑。 这是我正在寻找的算法。 非常感谢!

一种方法是使用通用边缘检测算法。 例如, Sobel边缘检测 。 但是,它没有针对干净,抗锯齿,双色图像进行优化,如下例所示,因此会产生稍微粗糙的结果。 为了更好地保留抗锯齿,并获得平滑的结果,我建议使用以下算法:

Image blurredImg = gaussianBlur(sourceImg, blurRadius = desiredOutlineWidth); const float sharpnessCoef = 0.1; // value may need tuning or may need to // depend on the blur radius Image dilatedImg = from blurredImg, map all pixels with brightness > sharpnessCoef to white and multiply the rest by 1 / sharpnessCoef Image smoothResult = subtract sourceImg from dilatedImg 

例:

边缘检测

考虑使用图像处理技术,如下所示:

http://www.codeproject.com/KB/cs/Canny_Edge_Detection.aspx