3 回答
TA贡献1777条经验 获得超10个赞
这是一个大课题。您可能会发现Johannes Kopf和Dani Lischinski 撰写的Depixelizing Pixel Art 1很有用:它是可读的,最新的,包括以前工作的摘要,并详细说明了他们的方法。
另请参见涵盖类似背景和视频(!)的幻灯片。
这是“最近邻居”与“他们的技术”文档中的一些屏幕截图。
TA贡献2003条经验 获得超2个赞
此问题的最通用版本是大多数计算机视觉管道中的初始阶段之一。这就是所谓的图像分割。它将图像划分为可视上相同的像素区域。这些区域由“轮廓”(例如参见本文)分隔开,“轮廓” 相当于穿过图像的沿像素边界延伸的路径。
有一种简单的递归算法,用于将轮廓表示为定义的折线,以使轮廓中的任何点的偏差都不会超过max_dev您选择的某个固定量(例如)。通常是1/2到2像素。
function getPolyline(points [p0, p1, p2... pn] in a contour, max_dev) {
if n <= 1 (there are only one or two pixels), return the whole contour
Let pi, 0 <= i <= n, be the point farthest from the line segment p0<->pn
if distance(pi, p0<->pn) < max_dev
return [ p0 -> pn ]
else
return concat(getPolyline [ p0, ..., pi ], getPolyline [ pi, ..., pn] )
其背后的想法是,您似乎已经将卡通图像分割了。因此,如果您编写了将边缘像素组合成链的简单搜索,则可以使用上述算法将它们转换为平滑的线段链。甚至可以使用抗锯齿来绘制它们。
添加回答
举报