3 回答

TA貢獻1725條經驗 獲得超8個贊
這是一個大課題。您可能會發現Johannes Kopf和Dani Lischinski 撰寫的Depixelizing Pixel Art 1很有用:它是可讀的,最新的,包括以前工作的摘要,并詳細說明了他們的方法。
另請參見涵蓋類似背景和視頻(?。┑幕脽羝?。
這是“最近鄰居”與“他們的技術”文檔中的一些屏幕截圖。

TA貢獻1810條經驗 獲得超4個贊
此問題的最通用版本是大多數計算機視覺管道中的初始階段之一。這就是所謂的圖像分割。它將圖像劃分為可視上相同的像素區域。這些區域由“輪廓”(例如參見本文)分隔開,“輪廓” 相當于穿過圖像的沿像素邊界延伸的路徑。
有一種簡單的遞歸算法,用于將輪廓表示為定義的折線,以使輪廓中的任何點的偏差都不會超過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] )
其背后的想法是,您似乎已經將卡通圖像分割了。因此,如果您編寫了將邊緣像素組合成鏈的簡單搜索,則可以使用上述算法將它們轉換為平滑的線段鏈。甚至可以使用抗鋸齒來繪制它們。
添加回答
舉報