【Aegisub】繪圖骨架提取

? ? ? ? 雖然很早之前就做過骨架提取的視頻,但是也沒多少人看
????????先看一下繪圖提取的效果。比如下面的文字繪圖

提取骨架就得到了:? ? ? ??


算法很簡單,就是先將繪圖轉(zhuǎn)像素,然后一次次的去掉邊緣,最后就能得到骨架了。直接講算法就是了:
? ? ? ??首先想象一個像素周圍會有8個像素

假設這個像素是x1,那么周圍會有x2~x9共8個相鄰的像素。當然并不是說這8個像素都在繪圖上,所以可以標記一下,如果繪圖轉(zhuǎn)像素以后得到的像素表里,某個像素存在哪些相鄰的像素那么相應的位置就標記為1,比如:

x1這個像素在2、5、6、7這幾個位置有鄰居(繪圖轉(zhuǎn)像素得到的像素表里有它們),所以這幾個位置就標記1、其它的位置標記0。那么當然像素表里的每個像素的鄰居都可能有所不同,所以相當于要遍歷每個像素,然后再遍歷像素表,記錄每個像素的鄰居。
然后就是不停地去掉邊緣,直到最后只剩下骨架,所以就是要標記哪些像素是需要刪除的。每次大概要執(zhí)行兩個步驟:
一:檢查與該像素相鄰的像素有哪些需要標記為1
? ? ? ??順時針查看x2、x3、...、x9、x2時,從0到1的變化次數(shù)僅為1
????????x2、x3、...、x9中1的個數(shù)在2個以上6個以下
? ? ? ?x2*x4*x6等于0
? ? ? ?x4*x6*x8等于0
所有像素都這樣檢查完以后,滿足以上所有條件的像素刪除掉,然后再來第二步
二:又檢查與該像素相鄰的像素有哪些需要標記為1
? ? ? ??順時針查看x2、x3、...、x9、x2時,從0到1的變化次數(shù)僅為1
????????x2、x3、...、x9中1的個數(shù)在2個以上6個以下
? ? ? ?x2*x4*x8等于0
? ? ? ?x2*x6*x8等于0
所有像素都這樣檢查完以后,滿足以上所有條件的像素又刪除掉
然后一次次這樣的刪除,直到進行完步驟一和步驟二以后,都沒有一個像素需要刪除的話,就可以停止刪除了。就得到了繪圖的骨架了。
然后解釋一下什么叫“從0到1的變化次數(shù)僅為1”,比如就拿這個圖來說

從x2開始,x2到x3是1到0,x3到x4是0到0,x4到x5是0到1,x5到x6是1到1,x6到x7是1到1,x7到x8是1到0,x8到x9是0到0,x9再到x2是0到1,所以總共有2次是0到1的,就不滿足“從0到1的變化次數(shù)僅為1”這個條件了。
? ? ? ??這樣就能得到繪圖的骨架了。
? ? ? ? 具體的代碼照舊是在相應的視頻里講。