[TAC:08] yakudo camera製作記

はじめに

この記事はクソアプリ Advent Calendar 2017,およびtaniho Advent Calendar 2017の8日目の記事です.

今日はクソみたいなAndroidアプリ,”yakudo camera”を作ったお話をします.一応前回からの続きで,前回の記事ではアプリに広告を貼った話,今回が作ったアプリの話になります.

まあ,クソみたいな話なので読まなくていいと思います.

yakudoとは

※僕とは何の関係もないサークルが発祥です

あなたの知らない躍動の世界 | 東京工業大学デジタル創作同好会traP

traPとは全く別のサークルから,twitter経由でyakudoを知りました.今では僕のサークルでも大流行しています.

yakudoとは,バカらしくも意外と奥が深く,綺麗な躍動写真を撮影するには練習が必要です.
……ハードルが高いですよね?

カメラをかざしてシャッターを押すだけで躍動写真が撮影できるアプリ,作りました.
(traPの方々には何の連絡もせず作ってしまいました.問題がありそうならお知らせください)

躍動感を出す

躍動感とは

そもそも躍動感って何なのでしょうか?

躍動感 読み方:やくどうかん
生き生きとしていて動きがよく分かるような様子や雰囲気のこと
躍動感とは - 日本語表現辞典 Weblio辞書

撮影する対象が,生き生きしているような動きが付く撮影のことだと解釈しましょう.
最も一般的な躍動写真は,被写体に向かってカメラを押しながら/引きながら撮影をすることで躍動感を出しています.撮影した写真の被写体は動かず背景がブレるため,「被写体が生き生きと動いている」ように見えるわけですね.
これは僕が撮影した躍動写真です.

ごきぶり

金麦

ゆるゆり

いい感じの躍動感が付いています.

躍動感を付けてみる

今回はQtでアプリを作りました.QtにはQImageというクラスがあり,画素単位のアクセスが出来ます.撮影した画像を取り込んで,思いついたアルゴリズムを試してみましょう.

安直に

撮影中にカメラを動かすということは,写真の画素同士を混ぜれば良さそうです.RGB値のそれぞれの平均を取ってみましょう.次のように加工します.

安直かつ確実な方法

加工済みの写真がこちら.

いやまあかんたんにきれいになりましたねえ!!

と言いたいところなのですが,画像処理にクッソ時間がかかってしまいました.1枚あたり1分程度です.というわけで,ここからは画像処理高速化の苦労を順に見ていきます.

LPFを考える

躍動感を付けるために画像をぼかす処理をしたのですが,先程のは計算時間がかかりすぎました.ということで,同じLPFでも計算時間がかからないような式に変えてみます.

隣しか見ない

式は次のURLなどを参考にしています.

加速度センサ と ローパスフィルタ (波形) | アンドロイドな日々

コレにより計算時間がわずか数秒にまで短くなりました!!

んですが今度は加工した画像がえらいことになりました.

隣の画素1個しか見ないので,どうしても滑らかになってくれないんですよね.
これが解決策です.

周りをよく見る

このようにすることで,僅かな計算時間で程々の躍動感を付けることが出来ました.
ただし,ここままでは中心点からまっすぐ45°方向に汚い線が入ってしまいます.

その場合は斜め方向の画素でなく,隣の画素も見てあげるようにすれば,…

かわいい

きれいになりました.

あ,次の画像はバグ画像です.

↑パラメータを間違えると最後の画像のようになっちゃいました

完成形

というわけで,とりあえずアプリで加工ができるようになりました.
一応,公開しているアプリの特徴を紹介しておきます.

  1. 躍動中心を設定可能
    アプリを起動してもらえればわかります.
    画面をタップすることで,躍動感を与える場所を変更することが出来ます.
    ちょっとバグが潜んでるかもしれません.
  2. 躍動レベルを調整可能
    躍動する強さを変えられるようにしました.

    躍動レベル0
    躍動レベル0.2
    躍動レベル0.4
    躍動レベル0.5

まとめ

お手軽に躍動感を付けられました.現在アプリは下のURLで公開中です.
手元のZenFoneでは動いていますが,Xperiaでは不具合があります.他の機種では未確認です.ごめんなさい.

yakudo camera - Google Play の Android アプリ

明日のtaniho Advent Calendar 2017は打って変わって,Discordのbotを作った話をします.