Grid Detection

Kategori: Computer Vision , 30 Ocak 2020 , JanFranco


Grid detection daha çok kamera kalibrasyonlarında, kamera ayarlamalarında kullanılır. Grid ızgara olarak çevrilebilir. Bir pattern bulma problemidir. OpenCV üzerinde grid detection ile ilgili iki method bulunmakta. Python üzerinden görelim, kütüphaneleri ve resimleri import edelim:


import cv2

img = cv2.imread('../data/flat_chessboard.png')
cv2.imshow('img', img)
cv2.waitKey(0)
>>

Grid Detection


found, corners = cv2.findChessboardCorners(img, (7, 7))
print(found)
print(corners)

>>

True

[[[ 43.500004  43.500004]]
 [[ 87.5       43.5     ]]
 [[131.5       43.5     ]]
 [[175.5       43.5     ]]
 [[219.5       43.5     ]]
 [[263.5       43.5     ]]
 [[307.5       43.5     ]]
 [[ 43.499996  87.50001 ]]
 [[ 87.5       87.5     ]]
 [[131.5       87.5     ]]
 [[175.5       87.5     ]]
 [[219.5       87.5     ]]
 [[263.5       87.5     ]]
 [[307.5       87.49999 ]]
 [[ 43.500004 131.5     ]]
 [[ 87.5      131.5     ]]
 [[131.5      131.5     ]]
 [[175.5      131.5     ]]
 [[219.5      131.5     ]]
 [[263.5      131.5     ]]
 [[307.5      131.5     ]]
 [[ 43.499996 175.5     ]]
 [[ 87.5      175.5     ]]
 [[131.5      175.5     ]]
 [[175.5      175.5     ]]
 [[219.5      175.5     ]]
 [[263.5      175.5     ]]
 [[307.5      175.5     ]]
 [[ 43.500004 219.5     ]]
 [[ 87.5      219.5     ]]
 [[131.5      219.5     ]]
 [[175.5      219.5     ]]
 [[219.5      219.5     ]]
 [[263.5      219.5     ]]
 [[307.5      219.5     ]]
 [[ 43.499996 263.5     ]]
 [[ 87.5      263.5     ]]
 [[131.5      263.5     ]]
 [[175.5      263.5     ]]
 [[219.5      263.5     ]]
 [[263.5      263.5     ]]
 [[307.5      263.5     ]]
 [[ 43.5      307.5     ]]
 [[ 87.5      307.5     ]]
 [[131.5      307.5     ]]
 [[175.5      307.5     ]]
 [[219.5      307.5     ]]
 [[263.5      307.5     ]]
 [[307.5      307.5     ]]]
Bu iki methoddan ilki findChessboardCorners. Argüman olarak input resmi ve kaç corner olacağını alır. 8x8 kare mevcutken 7, 7 girmemizin sebebi, resmin dış hatlarında yer alan karelerin köşelerinin tespit edilememesindendir. Method bir boolean değişken bir ve bir liste döner. Eğer köşeler bulunursa True, bulunamazsa False değer döner. Bulunursa corners değişkeninde bir liste saklanır. Listede köşe koordinatları vardır.

drawChessboardCorners methodu ile köşeleri resim üzerinde çizdirebiliriz:


print(cv2.drawChessboardCorners(img, (7, 7), corners, found))
cv2.imshow("img", img)
cv2.waitKey(0)

>>

[[[158 206 255]
  [158 206 255]
  [158 206 255]
  ...
  [ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]]

 [[158 206 255]
  [158 206 255]
  [158 206 255]
  ...
  [ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]]

 [[158 206 255]
  [158 206 255]
  [158 206 255]
  ...
  [ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]]

 ...

 [[ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]
  ...
  [158 206 255]
  [158 206 255]
  [158 206 255]]

 [[ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]
  ...
  [158 206 255]
  [158 206 255]
  [158 206 255]]

 [[ 71 139 209]
  [ 71 139 209]
  [ 71 139 209]
  ...
  [158 206 255]
  [158 206 255]
  [158 206 255]]]


Grid Detection

İki methoddan birincisini gördük. Diğer method ise findCirclesGrid methodudur. Resmi alalım:


img = cv2.imread('../data/dot_grid.png')
cv2.imshow("img", img)
cv2.waitKey(0)
>>

Grid Detection

Method parametre olarak input resim, kaç köşe olacağı, çalışma methodu alır. Aynı şekilde drawChessboardCorners methodu ile görelim:


found, corners = cv2.findCirclesGrid(img, (10, 10), cv2.CALIB_CB_SYMMETRIC_GRID)
cv2.drawChessboardCorners(img, (10, 10), corners, found)
cv2.imshow("img", img)
cv2.waitKey(0)
>>

Grid Detection


Sonraki Yazı: Contour Detection
Yorumlar

Henüz bir yorum bulunmuyor.