Kornia 0.6 : Tutorials (基本) : 形態学的演算子へのイントロダクション

Kornia 0.6 : Tutorials (基本) : 形態学的演算子へのイントロダクション (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/23/2022 (v0.6.8)

* 本ページは、Kornia Tutorials の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく 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!

 

以上