欢迎光临散文网 会员登陆 & 注册

【Aegisub】绘图骨架提取

2022-04-01 01:04 作者:多华宫与火火里  | 我要投稿

        虽然很早之前就做过骨架提取的视频,但是也没多少人看

        先看一下绘图提取的效果。比如下面的文字绘图

提取骨架就得到了:        

算法很简单,就是先将绘图转像素,然后一次次的去掉边缘,最后就能得到骨架了。直接讲算法就是了:

        首先想象一个像素周围会有8个像素

假设这个像素是x1,那么周围会有x2~x9共8个相邻的像素。当然并不是说这8个像素都在绘图上,所以可以标记一下,如果绘图转像素以后得到的像素表里,某个像素存在哪些相邻的像素那么相应的位置就标记为1,比如:

x1这个像素在2、5、6、7这几个位置有邻居(绘图转像素得到的像素表里有它们),所以这几个位置就标记1、其它的位置标记0。那么当然像素表里的每个像素的邻居都可能有所不同,所以相当于要遍历每个像素,然后再遍历像素表,记录每个像素的邻居。

然后就是不停地去掉边缘,直到最后只剩下骨架,所以就是要标记哪些像素是需要删除的。每次大概要执行两个步骤:

一:检查与该像素相邻的像素有哪些需要标记为1

        顺时针查看x2、x3、...、x9、x2时,从0到1的变化次数仅为1

        x2、x3、...、x9中1的个数在2个以上6个以下

       x2*x4*x6等于0

       x4*x6*x8等于0

所有像素都这样检查完以后,满足以上所有条件的像素删除掉,然后再来第二步

二:又检查与该像素相邻的像素有哪些需要标记为1

        顺时针查看x2、x3、...、x9、x2时,从0到1的变化次数仅为1

        x2、x3、...、x9中1的个数在2个以上6个以下

       x2*x4*x8等于0

       x2*x6*x8等于0

所有像素都这样检查完以后,满足以上所有条件的像素又删除掉

然后一次次这样的删除,直到进行完步骤一步骤二以后,都没有一个像素需要删除的话,就可以停止删除了。就得到了绘图的骨架了。

然后解释一下什么叫“从0到1的变化次数仅为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的变化次数仅为1”这个条件了。

        这样就能得到绘图的骨架了。

        具体的代码照旧是在相应的视频里讲。

【Aegisub】绘图骨架提取的评论 (共 条)

分享到微博请遵守国家法律