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

Matplotlibでグレースケール画像から3Dサーフェスプロットを作成する方法

Matplotlibを使えば、グレースケール画像のデータをもとに立体的なサーフェスプロット(表面プロット)を簡単に作成できます。画像の輝度値を高さ情報として扱うことで、2次元の画像データを3次元的に視覚化することが可能です。

作成手順

  • 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。

  • NumPyを使ってランダムなデータポイントを作成します。

  • 2次元の画像データラスタから、xxyy の座標データポイントを取得します。

  • 新しい図を作成するか、既存の図をアクティブにします。

  • 現在の軸を取得し、3D投影(3d projection)の axes に設定します。

  • cmap='gray' を指定してサーフェスプロットを作成します。

  • 図を表示するには、show() メソッドを使用します。

コード例

import numpy as np
import matplotlib.pyplot as plt

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

data = np.random.rand(5, 5)

xx, yy = np.mgrid[0:data.shape[0], 0:data.shape[1]]

fig = plt.figure()

ax = fig.gca(projection='3d')
ax.plot_surface(xx, yy, data, rstride=1, cstride=1, linewidth=0, cmap='gray')

plt.show()

実行結果

Matplotlibでグレースケール画像から3Dサーフェスプロットを作成する方法

上記のコードを実行すると、グレースケールのカラーマップで着色された3Dサーフェスプロットが表示されます。各点の高さは、ランダムに生成された配列の値に対応しており、np.mgrid によって作成した xx・yy のメッシュ座標がX軸・Y軸方向の位置を決定します。

補足:新しいバージョンのMatplotlibでの注意点

Matplotlib 3.5以降では、fig.gca(projection='3d') は非推奨(deprecated)となっています。今後のコードでは、以下のように add_subplot を使って3D軸を作成する方法が推奨されています。

ax = fig.add_subplot(projection='3d')

この書き方に置き換えても、出力されるグラフは同じになります。また、rstridecstride を調整することで、面の分割密度を変更でき、linewidth=0 を指定することでワイヤーフレームの線を消して滑らかな表面表示にできます。


  1. Matplotlibで任意のデータを使って4Dプロットを作成する方法

    Matplotlibでは、x・y・z の3つの座標データに加え、c(色) を第4の次元として割り当てることで、いわゆる「4Dプロット」を実現できます。これは実際には3D散布図にカラーマップを組み合わせたものであり、点の位置が3次元情報を、色がもう1つの変数を表現します。以下の手順に従うことで、標準正規分布に従うランダムなデータポイントを使った4Dプロットを簡単に作成できます。手順figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブ化します。サブプロット構成の一部として、3D投影(projection=3d)を指定した Axes を追加します。NumPy を使って x

  2. Matplotlibでヒストグラムデータから折れ線グラフを描画する方法

    Matplotlibでヒストグラムのデータをもとに折れ線グラフを描画するには、NumPyのhistogram()メソッドを使ってデータセットのヒストグラムを事前に計算しておくのが便利です。この記事では、同じデータをヒストグラムと折れ線グラフの両方で可視化する手順を解説します。実装の手順現在の図にサブプロットを追加します。nrows=2、ncols=1とし、index=1を指定します。NumPyのhistogram()メソッドを使用して、データセットのヒストグラム(度数とビンの境界値)を取得します。edgecolor=blackを指定してhist()メソッドでヒストグラムを描画します。インデック