Matplotlibでヒステリシスしきい値をプロットする方法
Matplotlibでヒステリシスしきい値をプロットする手順
Matplotlibとscikit-image(skimage)を組み合わせることで、画像に対してヒステリシスしきい値処理を適用し、その結果を可視化できます。以下の手順に従って実装しましょう。
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- 図(figure)とサブプロット(axes)のセットを作成します。
- ポンペイから出土したギリシャ硬貨のサンプル画像データを読み込みます。
- Sobelフィルターを使用して画像のエッジを検出し、低しきい値(low)と高しきい値(high)を設定します。
- 画像にヒステリシスしきい値処理を適用します。
- imshow()メソッドを使用して、データを2Dの通常ラスタ上に画像として表示します。
- 元の画像とヒステリシスしきい値適用後の画像にそれぞれタイトルを設定します。
- show()メソッドで図を表示します。
ヒステリシスしきい値処理とは
ヒステリシスしきい値処理は、Cannyエッジ検出などでも利用される手法です。高しきい値を超える画素は確実にエッジとみなし、低しきい値と高しきい値の間にある画素については、高しきい値を超える画素と連結している場合のみエッジとして採用します。これにより、ノイズによる偽のエッジを抑えながら、弱いエッジも効果的に保持できます。
コード例
import matplotlib.pyplot as plt
from skimage import data, filters
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots(nrows=1, ncols=2)
orig_img = data.coins()
edges = filters.sobel(orig_img)
low = 0.1
high = 0.4
low = (edges > low).astype(int)
height = (edges > high).astype(int)
hyst = filters.apply_hysteresis_threshold(edges, low, high)
ax[0].imshow(height + hyst, cmap='magma')
ax[0].set_xlabel('Hysteresis threshold')
ax[1].imshow(orig_img, cmap='magma')
ax[1].set_xlabel('Original Image')
plt.show()実行結果
このコードを実行すると、左側にヒステリシスしきい値処理を適用したエッジ検出結果が、右側に元の硬貨画像が「magma」カラーマップで並べて表示されます。しきい値の組み合わせを変えることで、検出されるエッジの強さや量を調整できるため、さまざまな画像に対して試してみると良いでしょう。
-
Python Matplotlibで3Dグラフをプロットする方法を解説
PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使
-
Matplotlibのプロットにテーブル(表)を配置する方法
データの可視化では、グラフと一緒に表形式のデータを表示したいケースがよくあります。Matplotlibではtable()メソッドを使うことで、プロット上に簡単にテーブルを配置できます。この記事では、pandasのデータフレームをもとに、Matplotlibのプロット内に見栄えの良いテーブルを作成する手順を解説します。 実装の手順 subplots()メソッドを使って、フィギュアサイズ(7, 7)のfigureとサブプロット(Axes)を作成します。 time(日時)と speed(速度)の2つの列を持つpandasのデータフレームを作成します。 df.shapeなどで配列のサイズを取得します