为了账号安全,请及时绑定邮箱和手机立即绑定

平滑锯齿状的路径

平滑锯齿状的路径

MM们 2019-10-12 10:05:39
前几天,我参加了将Image / Graphic转换为Shape的活动,并尝试通过在上添加Rectangle迭代来获取图像轮廓Area。那太慢了。该示例改为构建GP GeneralPath并Area从GP 创建。快多了。左上方的图像是“源图像”。右边的两个是处理轮廓的各个阶段。它们都在圆周围和三角形的斜边上有锯齿状的边缘。我想获得一种消除或减少锯齿状的形状。在ASCII艺术中。情况1:  12341 **2 **3 ***4 ***5 ****6 ****角在:(2,3)内角(3,3)(3,5)内角(4,5)情况2:  12341 ****2 ****3 **4 **5 ****6 ****角在:(4,2)(2,2)内角(2,5)内角(4,5)假设我们的路径具有所示的形状和列出的点,我想删除第一组的“内角”点,同时保留“成对”的内角(从图像中咬出) 2号有人可以建议一些聪明的内置方法来完成这项工作吗?如果不这样做,什么是识别内角位置和性质(成对/单个)的好方法?(我想我可以得到一个PathIterator并建立一个新的GeneralPath下降单数内角的方法-如果只有我能弄清楚如何识别它们的话!)。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

这是一个大课题。您可能会发现Johannes Kopf和Dani Lischinski 撰写的Depixelizing Pixel Art 1很有用:它是可读的,最新的,包括以前工作的摘要,并详细说明了他们的方法。


另请参见涵盖类似背景和视频(!)的幻灯片。


这是“最近邻居”与“他们的技术”文档中的一些屏幕截图。 

//img1.sycdn.imooc.com//5da13518000142a503130127.jpg//img1.sycdn.imooc.com//5da135190001da5203120127.jpg

查看完整回答
反对 回复 2019-10-12
?
湖上湖

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] )

其背后的想法是,您似乎已经将卡通图像分割了。因此,如果您编写了将边缘像素组合成链的简单搜索,则可以使用上述算法将它们转换为平滑的线段链。甚至可以使用抗锯齿来绘制它们。


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 426 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信