Python
 Computer >> コンピューター >  >> プログラミング >> Python

NumPyとMatplotlibで画像セグメンテーションをオーバーレイ表示する方法

NumPyとMatplotlibを組み合わせると、画像セグメンテーションの結果を元画像の上に重ねて(オーバーレイ)表示できます。マスク配列を活用すれば、検出した領域だけを色付きで半透明に強調することが可能です。

実装の手順

  • 10×10のサイズを持つマスク配列を作成します。
  • 一部の領域(中央部分)の値を1に更新します。
  • NumPyを使って画像データを生成します。
  • 条件を満たす要素をマスクし、マスク済みデータを作成します。
  • figure()メソッドで新しい図を作成、または既存の図をアクティブ化します。
  • imshow()メソッドでデータを2次元ラスタ画像として表示します。
  • show()メソッドで図を画面に表示します。

ポイント解説

np.ma.masked_where(mask == 0, mask)は、条件(mask == 0)を満たす要素を隠すことで、値が1の領域のみを描画対象にできる便利な関数です。また、alpha=0.7を指定すると、オーバーレイ画像が70%の不透明度で描画され、下にある元画像が透けて見えるため、セグメンテーション領域と元画像を同時に確認できます。

サンプルコード

from matplotlib import pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

# 10×10のマスク配列を作成し、中央部分を1に設定
mask = np.zeros((10, 10))
mask[3:-3, 3:-3] = 1

# マスクに微小なノイズを加えて画像データを生成
im = mask + np.random.randn(10, 10) * 0.01
masked = np.ma.masked_where(mask == 0, mask)

plt.figure()

# 左側: 元画像をグレースケールで表示
plt.subplot(1, 2, 1)
plt.imshow(im, 'gray', interpolation='none')

# 右側: 元画像にセグメンテーション領域をオーバーレイ
plt.subplot(1, 2, 2)
plt.imshow(im, 'gray', interpolation='none')
plt.imshow(masked, 'jet', interpolation='none', alpha=0.7)

plt.show()

出力結果

NumPyとMatplotlibで画像セグメンテーションをオーバーレイ表示する方法

左側が元画像(グレースケール)、右側がセグメンテーション領域をjetカラーマップで半透明に重ねた結果です。中央の領域が色付きで強調表示され、オーバーレイ処理が正しく機能していることが確認できます。

  1. Matplotlibでnumpyのdatetime64型の時系列データをプロットする方法

    PythonのMatplotlibを使って時系列データをグラフ化する方法を解説します。日付や時刻のデータ(datetime64型など)は、そのままplot()メソッドに渡すだけで自動的に軸に反映されるため、非常に簡単です。基本的な手順numpyを使ってx(日時)とy(数値)のデータを作成する。plot()メソッドで作成したxとyをプロットする。show()メソッドで図を表示する。サンプルコードimport matplotlib.pyplot as plt import datetime import numpy as np plt.rcParams[figure.figsize] = [7.

  2. Matplotlibのグラフをフルスクリーンで表示する方法

    Matplotlibで作成したグラフをフルスクリーン(全画面)で表示したい場合、full_screen_toggle()メソッドを使用すると簡単に実現できます。このメソッドは、現在開いているフィギュアウィンドウを全画面モードに切り替える機能を持ちます。 手順 figure()メソッドを使って、新しいフィギュアを作成するか、既存のフィギュアをアクティブにします。 2つのリストを渡してplot()メソッドを呼び出し、折れ線グラフを描画します。 get_current_fig_manager()メソッドで、現在のフィギュアのマネージャー(figure manager)を取得します。 取得したマネー