Kornia 0.6 : Tutorials (基本) : 形態学的演算子へのイントロダクション (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/23/2022 (v0.6.8)
* 本ページは、Kornia Tutorials の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
Kornia 0.6 : Tutorials (基本) : 形態学的演算子へのイントロダクション
このチュートリアルでは kornia.morphology を探索します、これは微分可能な形態学的演算子のための Kornia のモジュールです。
最後には、形態学的演算を次のように簡単に使用できます :
new_image = morph.operation(original_image, structuring_element)
しかしまず大事なことは、環境を準備しましょう。
Kornia のダウンロード
Kornia をインストールしていない場合、pip を使用してそれをダウンロードできます。
%%capture
!pip install git+https://github.com/kornia/kornia
画像の準備
kornia.morphology により、3 チャネルカラー画像で形態学的演算子を適用することができます。更に、すべての演算子は微分可能です。画像をダウンロードして読む込みましょう。
%%capture
!wget 'https://image.shutterstock.com/image-photo/portrait-surprised-cat-scottish-straight-260nw-499196506.jpg' -O img.jpg
画像をロードするために OpenCV を使用できます。
import cv2
img = cv2.imread("img.jpg") # Download Image
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Define RGB
構造化要素
元の画像の準備ができたので、演算の 2 番目のパートが必要です、構造化要素 (aka カーネル) です。
カーネルは奇数の辺を持つ 2-dim テンソルでなければなりません, i.e. 3×3
import torch
import kornia as K
device = 'cpu' # 'cuda:0' for GPU
kernel = torch.tensor([[0, 1, 0],[1, 1, 1],[0, 1, 0]]).to(device)
# to torch.tensor
img_t = K.image_to_tensor(img, keepdim=False)
img_t = img_t.float() / 255.
/home/docs/checkouts/readthedocs.org/user_builds/kornia-tutorials/envs/latest/lib/python3.7/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdm
プロットの作成!
このチュートリアルでは画像を変換する前と後で比較していきます。
プロットして変化を見る関数を作成することは意味があります。
import matplotlib.pyplot as plt
from matplotlib import rcParams
def plot_morph_image(tensor):
# kornia.tensor_to_image
image = K.tensor_to_image(tensor.squeeze(0)) # Tensor to image
# Plot before-after
rcParams['figure.figsize'] = 20 ,20
fig, ax = plt.subplots(1,2)
ax[0].axis('off')
ax[0].imshow(img)
ax[1].axis('off')
ax[1].imshow(image)
形態学
kornia.morphology の主な目標は、様々な形態学的演算子を以下のように簡単に実装できるようにすることです :
new_image = morph.operation(original_image, structuring_element)
Let’s check them all!
膨張 (= Dilation)
from kornia import morphology as morph
dilated_image = morph.dilation(img_t, kernel) # Dilation
plot_morph_image(dilated_image) # Plot
収縮 (= Erosion)
eroded_image = morph.erosion(img_t, kernel) # Erosion
plot_morph_image(eroded_image) # Plot
Open
opened_image = morph.opening(img_t, kernel) # Open
plot_morph_image(opened_image)
Close
closed_image = morph.closing(img_t, kernel) # Close
plot_morph_image(closed_image) # Plot
形態学的勾配
graded_image = morph.gradient(img_t, kernel) # Morphological gradient
plot_morph_image(1. - graded_image)
Bottom Hat
bottom_image = morph.bottom_hat(img_t, kernel) # Black Hat
plot_morph_image(1. - bottom_image)
Top Hat
toph_image = morph.top_hat(img_t, kernel) # Top Hat
plot_morph_image(1. - toph_image)
まとめ
And that’s it!
これで PyTorch パイプラインで微分可能な形態学的演算を適用するために Kornia を使用する方法を知りました。
Many thanks for using Kornia, and have fun!
以上