プログラミングとコナン

Pythonで画像の解像度を下げる方法【オブジェクトの分裂】

picture

先日、動画を見ていたら面白いのを見つけました。

BuzzVideo(バズビデオ)
特に怪しいリンクではないです。

ぼーっと眺めていたので、直感で「スゲー」と思いましが、コメントを見ると、「解像度を下げているだけ」とありました。疲れていると簡単な問題もわからなくなってしまうものです笑

今回は、上の動画をPythonで実装していきます。実行環境は google colaboratory です。

プログラミングでお悩みではありませんか?

こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。

プログラミングを学びたい人におすすめのスクール5選!

なぜこうなるのか?

理解しやすいように、分裂した後の画像を、拡大してみましょう。この画像は分裂後の1羽を拡大させたものです。画像がガタガタしているのが分かると思います。

このように、元の画像を切り出して交互につなぎ合わせると、鳥は解像度が大きく下がってしまいます。しかし、動画ではそこまでガタガタになっているようには感じなかったと思います。

その理由は、対象物の大きさが切り取った方向で半分になるからです。解像度が下がったとしても、対象物自体が小さくなるので、そこまで違和感のない画像が出力されるのですね。

解像度を上げることはできないのか?

スムージング処理など、上の画像のドット絵のようなガタガタを改善することは可能ですが、解像度を上げることはできません。解像度を上げる取り組みとしては、機械学習などの最先端な技術を用いて取り組まれているそうですが、あまりうまくいっていないのが現状です。

解像度を上げるとは、画像に含まれる情報量を多くするということです。しかし、元の画像以上に情報量を増やすことは不可能です。1個しかないリンゴを2個に増やそうとしても無理ですよね?それと同じです。

写真や動画を編集することができる「Photoshop」などで、解像度を上げる設定がありますが、画像をより高解像度っぽく見せる技術を使っているのです。その例が、スムージング処理やシャープネス処理です。

実装

実装手順は、動画の手順に従ってプログラムを作成していきます。

まずは、下の画像の様に交互に画像を分裂させていき、それぞれ別の画像A, 画像Bに保存していきます。実際に画像を切り出す間隔は 、10pixelで1セット分の画像を抽出するようにしているため、画像の粗さは5pixelずつになります。

縦で切り取った後、2つの画像をつなぎ合わせると、鳥が2羽に分裂します。この時、縦に切り取っているため、出力画像は、縦で見ると解像度は下がっていませんが、横で見ると粗くなっているのが確認できます。

この作業を横でも同じように繰り返すことで 、2羽から 4羽に増えていきます。

nano-toy-lab

関数「disassembly」

この関数では、画像の分裂を行っています。

メイン関数

メイン関数です。対象の画像は作業ディレクトリに置きましょう。

google colaboratory では、 「google drive」にファイルを保存することが出来ます。その場合、以下のコマンドを打ちましょう。

cd drive/MyDrive/

全体のコード

今回は、サンプルコードがすごく短いですが、1からプログラムを作成するには少し難易度が高いような気がします。個人的に躓いたのは、画像のindexの取得方法を勘違いしていて30分位そこだけで時間がかかりました。笑

正)img[0, 0, 0]
誤)img[0][0][0]

理屈的にはあってるんですが、エラーが出ないのに加えて、思うような結果にならないので気を付けましょう。

出力結果

ここからは、出力画像を見ていきます。

元画像

分裂1回

分裂2回

うぇr

もっと鳥と増やしてみた!

ゲシュタルト崩壊を起こしそう?ですね笑

ここまでくると完全に解像度が荒いことが確認できます。

ただ、かわいい鳥さんがたくさん見れて幸せハッピーです!

かわいいねぇ~!

この処理は同じことを繰り返しているので関数を別で定義するなどコードをもっと短くできますが、疲れたのですでに作成したプログラムを伸ばしただけです。勘弁してください笑

まとめ

今回は、オブジェクトの分裂方法や、画像の解像度を下げる方法を解説しました。なかなか面白い内容だったのではないかなと思っております。

また、解像度のお勉強にもなったと思います。今後も面白い内容を発信していきますので当ブログをよろしくお願いいたします。

プログラミングでお悩みではありませんか?

こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。

プログラミングを学びたい人におすすめのスクール5選!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA