メインコンテンツまでスキップ

画像の表現

Python で画像を表現してみましょう。

白黒の表現

東京大学がアルゴリズム入門の授業用に作った ita ライブラリを使えば、簡単に画像を表現できます。(ita って、Introduction to Algorithms の略なんですかね?) ita ライブラリは、インストールして使う必要があります。ライブラリをインストールするには、先頭で !pip install ita と書けば良いのでした。

ita ライブラリで画像を扱う場合は、次のようなコードをはじめの方に書いておく必要があります。これに関しては、おまじないだと思ってください。Google Colaboratory 上でうまく表示するために、必要になっています。

%matplotlib inline

次のように、0 と 1 が格納された二次元配列を作って、それを ita ライブラリの image_show 関数に与えれば、白黒の画像を表現できます。0 が黒、1 が白となります。

Open In Colab

練習問題

ita ライブラリを使って次のような画像を作ってみましょう。

市松模様

解答
Open In Colab

グレースケール

0 から 1 の間で数値を変化させることで、グレースケールを表現することもできます。

Open In Colab

カラー画像

赤、緑、青の順に 0 から 1 の範囲で指定することで、カラー画像を表現することもできます。

Open In Colab
光の三原色

光の三原色は、赤、緑、青です。この 3 つを混ぜることで、すべての色を表現することが可能です。加法混色なので、赤、緑、青をすべて合わせると白になります。

これを使った色の表現法が、RGB です。これは、赤(Red)、緑(Green)、青(Blue)の頭文字となっています。

コンピューターでは、0 から 255 の 256 段階でそれぞれの色を表すので、2563=16777216256^3 = 16777216 通りの表現が可能です。

色の三原色

色にも三原色があります。 色の三原色は、シアン、マゼンタ、イエローです。減法混色なので、シアン、マゼンタ、イエローをすべて合わせると黒になります。

これを使ったのが、CMYK です。インクなどに使われます。これは、シアン(Cyan)、マゼンタ(Magenta)、イエロー(Yellow)の頭文字です。K は BlacKからだと言われますが、キープレート(Key plate)からだそうです。K が入っているのは、インク代を節約するためと綺麗な黒を表現するためです。

練習問題

次のような画像を作ってみましょう。

黒から赤へのグラデーション

解答
Open In Colab

練習問題

練習問題 1

左から右にかけて、黒色から緑色に色が変化するグラデーション画像を作ってみましょう。

黒から赤へのグラデーション

配列.append(要素) とすることで、配列の末尾に要素を追加できます。

Open In Colab
ヒント

左側が黒で右側に行くにつれてだんだん緑になるように、数値を少しずつ変化させていけば良さそうです。

二次元配列の作り方としては、まず空の配列を作り、それに append を使って値を入れていき一次元配列を作ります。 さらに、これを空の配列に入れていけば、二次元配列になります。

解答
Open In Colab

練習問題 2

左から右にかけて、白色から青色に色が変化するグラデーション画像を作ってみましょう。これは、少し難しいです。分からなかったら、ヒントを見てください。

白から青へのグラデーション

ヒント

次のように、加重平均をとると、うまくできます。

加重平均の説明

{R=(1t)R1+tR2G=(1t)G1+tG2B=(1t)B1+tB2\left\{ \begin{aligned} R&=(1-t)R_1+tR_2 \\ G&=(1-t)G_1+tG_2 \\ B&=(1-t)B_1+tB_2 \end{aligned} \right.

右側の色と左の色を定義して、その加重平均をとるという流れになるかと思います。

解答
Open In Colab

練習問題 3

左上が白、右上が赤、左下が緑、右下が青となるようなグラデーション画像を作ってみましょう。

グラデーション

ヒント

次のように、二次元で加重平均をとると、うまくできます。

加重平均の説明

{R=s{(1t)R1+tR2}+(1s){(1t)R3+tR4}G=s{(1t)G1+tG2}+(1s){(1t)G3+tG4}B=s{(1t)B1+tB2}+(1s){(1t)B3+tB4}\left\{ \begin{aligned} R&=s\{(1-t)R_1+tR_2\}+(1-s)\{(1-t)R_3+tR_4\} \\ G&=s\{(1-t)G_1+tG_2\}+(1-s)\{(1-t)G_3+tG_4\} \\ B&=s\{(1-t)B_1+tB_2\}+(1-s)\{(1-t)B_3+tB_4\} \end{aligned} \right.
解答
Open In Colab