Matplotlibで画像をRGB各チャンネルごとに異なる色で表示する方法
Pythonの可視化ライブラリMatplotlibを使えば、カラー画像を赤(R)・緑(G)・青(B)の3つのチャンネルに分解し、それぞれ専用のカラーマップで美しく表示できます。この記事では、plt.imread()で読み込んだ画像をチャンネルごとに切り分けて表示する手順を、サンプルコード付きでわかりやすく解説します。
実装の流れ
- 図のサイズを設定し、サブプロット間の余白を調整する
- ファイルから画像を読み込み、配列として取得する
- カラーマップとタイトルのリストを作成する
- 図とサブプロットのセットを生成する
- 軸・画像・タイトル・カラーマップをzipでまとめる
- まとめたオブジェクトを反復処理し、各チャンネル画像にタイトルを設定する
show()メソッドで図を表示する
サンプルコード
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
image = plt.imread('bird.png')
titles = ['With red channel', 'With green channel', 'With blue channel']
cmaps = [plt.cm.Reds_r, plt.cm.Greens_r, plt.cm.Blues_r]
fig, axes = plt.subplots(1, 3)
objs = zip(axes, (image, *image.transpose(2, 0, 1)), titles, cmaps)
for ax, channel, title, cmap in objs:
ax.imshow(channel, cmap=cmap)
ax.set_title(title)
ax.set_xticks(())
ax.set_yticks(())
plt.show()コードのポイント解説
このコードの重要なポイントはimage.transpose(2, 0, 1)の部分です。通常、画像配列は「高さ × 幅 × チャンネル」の形状を持っていますが、transposeを使うことで「チャンネル × 高さ × 幅」に並べ替えられ、R・G・Bの各チャンネルを個別の2次元配列として取り出せるようになります。
また、カラーマップにはReds_r・Greens_r・Blues_rという逆順(_r)のカラーマップを使用しています。これにより、各チャンネルの強度が直感的な色合いで表現され、どのチャンネルがどの程度寄与しているかがひと目で把握できます。
入力画像


出力画像


まとめ
Matplotlibのsubplotsとimshowを組み合わせれば、わずか十数行のコードでRGBチャンネルの分解表示が実現できます。画像処理やコンピュータビジョンの学習において、各チャンネルの役割を視覚的に理解するのに非常に有効なテクニックなので、ぜひ実際に試してみてください。
-
Matplotlibのグラフをフルスクリーンで表示する方法
Matplotlibで作成したグラフをフルスクリーン(全画面)で表示したい場合、full_screen_toggle()メソッドを使用すると簡単に実現できます。このメソッドは、現在開いているフィギュアウィンドウを全画面モードに切り替える機能を持ちます。 手順 figure()メソッドを使って、新しいフィギュアを作成するか、既存のフィギュアをアクティブにします。 2つのリストを渡してplot()メソッドを呼び出し、折れ線グラフを描画します。 get_current_fig_manager()メソッドで、現在のフィギュアのマネージャー(figure manager)を取得します。 取得したマネー
-
Matplotlibで漸近線・不連続点を含むグラフを正しく描画する方法
はじめにMatplotlibで y = 1/x のような関数をそのままプロットすると、x = 0 付近で値が発散し、グラフ上に不自然な縦線が表示されてしまうことがあります。これは数値計算では厳密な「無限大」を扱えず、0に極めて近い大きな値として計算されるためです。本記事では、numpyとMatplotlibを組み合わせて、漸近線(不連続点)を持つ関数を見やすく描画する手順を解説します。処理の手順numpyを使ってx・yのデータポイントを作成します。plt.axis(off) で軸の表示をオフにします。plot() メソッドでx・yのデータをもとに曲線を描画します。axhline() で水平方向