2018-10-26こしあんTweetPocketNumpyだけで画像をサクッと拡大する方法を紹介します。OpenCVやPillowを使うまでもないな、というようなときに便利な方法です。ニューラルネットワークでインプットのサイズを調整するときも使えます。Neighbor法といいます。画像の拡大をするときに真っ先に思いつきそうな方法です。3]])とやる方法です。図にすれば一目瞭然ですね。forループを使わない1文でスッキリ書く方法ぱっとforループやnp.tileを使えばいいような気がしますが、もっとスッキリした書き方ありました。元ネタはStackOverFlowから。imageというNumpy配列に画像が格納されているものとします。axis=1)これは縦横2倍に拡大するサンプルです。これだけでいけるのです。これは目からウロコですね。具体例を見てみましょう。どっかで見たことのありそうなアイコンがあります。これを「icon.jpg」として読み込み、縦横8倍に拡大して、「zoomed_icon.jpg」として保存してみましょう。画像の読み込みと保存はコードを簡略化するためにPillowを使っています。実はPillowにはもっと高度なリサイズ関数あるのですが、Numpyでやりたいサンプルなので拡大には使いません。axis=1)Image.fromarray(zoomed_image).save("zoomed_icon.jpg")結果は以下のとおりです。した画像になりますが、そういうアルゴリズムなので仕方ないです。内部で何がおこっているかせっかくなので内でどういう処理がされているか追ってみましょう。2×3の行列を画像と見立てて拡大してみます。5]])np.arange...のところはいいですね。2×3の行列を作っているだけです。2つ目、「axis=0」を指定しているので、行列のaxis=0は行(縦)方向に繰り返しされます。その結果4×3の行列になります。3つ目、「axis=1」としているので、行列のaxis=1は列(横)方向に繰り返しされます。Neighbor法で2倍に拡大されました。Numpyで画像処理は時々必要になるのでぜひ使いこなしてくださいね。意外と本質的なことがわかって面白いです。Commentコメントをキャンセルメールアドレスが公開されることはありません。