nyaa laboratory

いろいろやって、いろいろ書いて見ようと思います(@kurodappo)

ゆゆ式Advent Calendar 2016 18日目:nyaa式4コマ切り出しプログラムを作った

こちらは

ゆゆ式Advent Calendar 2016 18日目の記事です。

www.adventar.org

 

ゆゆ式

ついにスペシャルエピソードが発売されますね。新しいお話がアニメーションになるというのはとても嬉しいことです。とても楽しみです。

なんとも言えない独特なゆゆ式の流れやセリフの言い回しをアニメで見てみたいものです。

 

このおめでたい発表の直後にAdvent Calendearというわけで、初参加させていただきます。

今日のテーマ

今日のテーマは4コマ切り出しプログラムです。

私がゆゆ式Advent Calendarに初めて触れたエントリーです。こんな面白いことやってる人がいるんだと感動したのをよく覚えています。

 

過去のエントリーはこちらです。

元祖(2014年)

non117.hatenablog.com

 

2015年

esuji5.hateblo.jp

 

前置き

素材については、Kindle版をiPadで表示し、スクリーンショットを何枚か撮影して用意しました。

 

プログラムの方は、C++OpenCVを使用しました。

仕組み

オリジナル方式

はじめに、元祖2014年方式を再現してみました。

こんな感じです。

f:id:nyaaj:20161217215348p:plain

 

これで基本的な構成のコマは分割することが可能となりました。

 

ところが

こちらの方式には限界があり、以下の扉絵のような特殊なコマでは、枠線が正しく認識されず、違う領域を切り出すことがあります。

f:id:nyaaj:20161217220351p:plain

また、特殊な形の吹き出しには対応できていません。

 

f:id:nyaaj:20161217220828p:plain   f:id:nyaaj:20161217221215p:plain

 

この対策として、従来とは異なるアプローチを導入します。

nyaa式コマ切り出し法

処理の手順は以下の通りです。

1.ラベリングにより、ページ全体に含まれる領域を検出します。領域を認識するために、着色を行っています。実際は2値画像です。

f:id:nyaaj:20161217222853p:plain

 

2.検出した領域情報の中で一番面積の大きいもの(最外殻)を選択し、白黒反転します(2値画像のため)

f:id:nyaaj:20161217223523p:plain

 

3. 2で作成した画像を1と同様にラベリングを行い、コマごとに切り抜くための座標を保存します。(検出領域を着色しています)

f:id:nyaaj:20161217224451p:plain

 

4. 保存した座標をコマの位置関係が一致するようにソートを行います。

5. ソートを行った座標情報より、元画像をマスクして、個別のファイルとして出力します。

f:id:nyaaj:20161217225320p:plain

 

このような感じです。大抵のコマに対して、良い結果が得られました。

また、ソートの手順を変更することで、4コマだけでなく、横に進むような形式も扱うことができます。

 

応用・実践編

さて、ここで従来方式で問題となった扉絵を試してみます。

扉絵に対して処理を行うと以下のようになります。

f:id:nyaaj:20161217231539p:plain

いい感じですね。正しく出力されました。

 

また、特殊な吹き出しのあるコマについては以下のようになります。

f:id:nyaaj:20161217231048p:plain

ソートが狂っちゃいましたが、切り抜きは正しくできていることが確認できます。

ソートについては今後の課題ですね。

 

今日のまとめ

ゆゆ式は他作品と比べて、非常にコマが綺麗に整っているため、基本的なコマ構成、特殊吹き出し、扉絵に対応させれば1冊の9割はカバーできると思います。

 

今回、従来の問題を解決し、連載分を完璧にカバーできたました。扉絵ごとに一つの括りにすれば、全巻通して季節順に並び替えたりすることが可能になるかと思います。

 

タブレットKindleゆゆ式を読むのは快適ですが、スマホだと面倒なので、コマごとにして、スクロールで読めるようになったら便利ですね。実際にスマホKindleに実装されないかな。