3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

opencvを用いた特徴量の検出(コーナー検出)

Last updated at Posted at 2019-12-14

はじめに

opencvを用いて画像の特徴量の検出について。今回はコーナー(曲線など)の検出をしていく。
2パターンの検出方法を行う。
基礎的なことについては、以下のページ参照
Pythonによる二値化画像処理の基本https://qiita.com/jin237/items/04ca3d0b56e10065c4e4

やってみよう

opencvを用いるが、コーナー検出には2つの方法がある。

"cv2.cornerHarris"によるコーナー検出

エッジがあらゆる方向に高い輝度変化を持つ領域として想定。

# サンプル画像からコーナーの検出
import matplotlib.pyplot as plt
%matplotlib inline
import cv2


# 画像読み込みと二値化
img = cv2.imread("sample.png",0)
# コーナーの検出
corners = cv2.cornerHarris(img, 3,1,0.04)
plt.imshow(corners, cmap='gray')
plt.savefig('gray_pltsample')

gray_pltsample.png

img = cv2.imread("sample.png", 0)

によって、画像の読み込みと同時に"0"が二値化画像としての読み込みを可能とする。
本来であれば、"cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)"のように書くこともできるが今回は処理を見やすくするために、この方法を使った。
matplotlibによって、表示と保存を行っている。
また、

corners = cv2.cornerHarris(img, 3,1,0.04)

については、
3 = 近傍画素範囲(blocksize)
1 = カーネルサイズ(ksize)
0.04 = Harris検出器フリーパラメータ(k)

blockSize - コーナー検出の際に考慮する隣接領域のサイズ.
ksize - Sobelの勾配オペレータのカーネルサイズ.
k - 式中のフリーパラメータ.

理論については、Harrisコーナー検出を参照。

"cv2.goodFeaturesToTrack"によるコーナー検出

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('sample.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,100000000,0.01,10)
corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,255,-1)

plt.imshow(img),plt.show()

gFTT_lenna.png

特徴点に対して、点を打つことができる。今回は多めに設定してみたが、あまり結果に対する変化はない。この赤点を工夫してみれば、もう少しわかりやすくなったりするかもしれない。

さいごに

コーナーの検出を行った。簡単にできることなのでぜひ理論も含めて、理解してみるといい。上記の紹介したもの以外にもあるので、ほかの記事で書いてみようと思う。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?