· Hakan Çelik · OpenCV / İleri Konular · 2 dk okuma
Kontur Nitelikleri

OpenCV Serisi 28/64
- 1. Boya Fırçası Olarak Fare
- 2. Canny Kenar Algılama
- 3. Görüntü Geçişleri
- 4. Görüntü Piramitleri
- 5. Görüntülerde Aritmetik İşlemler
- 6. Görüntülerle İlgili Temel İşlemler
- 7. Görüntünün Geometrik Dönüşümleri
- 8. Görüntüyü Yumuşatma - ( Smoothing Images )
- 9. Histogramlar
- 10. Konturler ( Contours )
- 11. Morfolojik Dönüşümler
- 12. Opencv Nedir Ve Kurulumu
- 13. Opencv Resim Işlemleri
- 14. Opencv Video Işlemleri
- 15. Opencv'de Çizim Fonksiyonları
- 16. Performans Ölçüm Ve Geliştirme Teknikleri
- 17. Renk Alanlarını Değiştirme
- 18. Renk Paleti Olarak Parça Çubuğu ( Trackbar )
- 19. Resim Eşikleme
- 20. Şablon Eşleştirme
- 21. Hough Doğru Dönüşümü
- 22. Hough Daire Dönüşümü
- 23. Fourier Dönüşümü
- 24. Histogram Eşitleme
- 25. 2B Histogramlar
- 26. Histogram Geri Projeksiyonu
- 27. Kontur Özellikleri
- 28. Kontur Nitelikleri
- 29. Konturlerle Daha Fazla İşlev
- 30. Kontur Hiyerarşisi
- 31. GrabCut ile Etkileşimli Ön Plan Çıkarma
- 32. Watershed Algoritması ile Görüntü Segmentasyonu
- 33. Özellikleri Anlamak
- 34. Harris Köşe Tespiti
- 35. Shi-Tomasi Köşe Dedektörü ve İzlenecek İyi Özellikler
- 36. SIFT'e Giriş (Ölçek Değişmez Özellik Dönüşümü)
- 37. SURF'e Giriş (Hızlandırılmış Sağlam Özellikler)
- 38. Köşe Tespiti için FAST Algoritması
- 39. BRIEF — İkili Sağlam Bağımsız Temel Özellikler
- 40. ORB (Yönlü FAST ve Döndürülmüş BRIEF)
- 41. Özellik Eşleştirme
- 42. Özellik Eşleştirme + Nesneleri Bulmak için Homografi
- 43. Meanshift ve Camshift ile Nesne Takibi
- 44. Optik Akış
- 45. Arka Plan Çıkarma
- 46. Kamera Kalibrasyonu
- 47. Poz Tahmini
- 48. Epipolar Geometri
- 49. Stereo Görüntülerden Derinlik Haritası
- 50. k-En Yakın Komşuyu Anlamak
- 51. kNN ile El Yazısı OCR
- 52. SVM'yi Anlamak
- 53. SVM ile El Yazısı OCR
- 54. K-Ortalamalar Kümeleme'yi Anlamak
- 55. OpenCV'de K-Ortalamalar Kümeleme
- 56. Görüntü Gürültü Giderme
- 57. Görüntü Onarımı (Inpainting)
- 58. Yüksek Dinamik Aralık (HDR) Görüntüleme
- 59. Haar Cascade ile Yüz Tespiti
- 60. pip ile OpenCV Kurulumu
- 61. Ubuntu'da OpenCV-Python Kurulumu
- 62. Fedora'da OpenCV-Python Kurulumu
- 63. Windows'ta OpenCV-Python Kurulumu
- 64. OpenCV-Python Bağlayıcıları Nasıl Çalışır?
Kontur Nitelikleri
Bu bölümde nesnelerin katılık (solidity), eşdeğer çap, maske görüntüsü, ortalama yoğunluk gibi sık kullanılan özelliklerini çıkarmayı öğreneceğiz.
Not: Ağırlık merkezi, alan, çevre gibi özellikler de bu kategoriye girer; ancak bunları bir önceki bölümde gördük.
1. En-Boy Oranı (Aspect Ratio)
Nesnenin sınır dikdörtgeninin genişliğinin yüksekliğine oranıdır:
En-Boy Oranı = Genişlik / Yükseklik
x, y, w, h = cv.boundingRect(cnt)
aspect_ratio = float(w) / h2. Uzanım (Extent)
Uzanım, kontur alanının sınır dikdörtgeni alanına oranıdır:
Uzanım = Nesne Alanı / Sınır Dikdörtgeni Alanı
area = cv.contourArea(cnt)
x, y, w, h = cv.boundingRect(cnt)
rect_area = w * h
extent = float(area) / rect_area3. Katılık (Solidity)
Katılık, kontur alanının dışbükey zarf alanına oranıdır:
Katılık = Kontur Alanı / Dışbükey Zarf Alanı
area = cv.contourArea(cnt)
hull = cv.convexHull(cnt)
hull_area = cv.contourArea(hull)
solidity = float(area) / hull_area4. Eşdeğer Çap (Equivalent Diameter)
Eşdeğer çap, alanı kontur alanıyla aynı olan dairenin çapıdır:
Eşdeğer Çap = √(4 × Kontur Alanı / π)
area = cv.contourArea(cnt)
equi_diameter = np.sqrt(4 * area / np.pi)5. Yönelim (Orientation)
Yönelim, nesnenin yönlendirildiği açıdır. Aşağıdaki yöntem aynı zamanda ana eksen ve yardımcı eksen uzunluklarını da verir:
(x, y), (MA, ma), angle = cv.fitEllipse(cnt)6. Maske ve Piksel Noktaları
Bazı durumlarda nesneyi oluşturan tüm noktalara ihtiyaç duyabiliriz. Bu şu şekilde yapılabilir:
mask = np.zeros(imgray.shape, np.uint8)
cv.drawContours(mask, [cnt], 0, 255, -1)
pixelpoints = np.transpose(np.nonzero(mask))
# pixelpoints = cv.findNonZero(mask)Burada aynı işlemi yapmak için biri NumPy fonksiyonlarını kullanan, diğeri ise OpenCV fonksiyonunu kullanan (son yorum satırı) iki yöntem verilmiştir. Sonuçlar aynıdır, ancak küçük bir fark vardır: NumPy koordinatları (satır, sütun) formatında verirken OpenCV (x, y) formatında verir. Yani satır = y ve sütun = x’tir.
7. Maksimum Değer, Minimum Değer ve Konumları
Bu parametreleri maske görüntüsü kullanarak bulabiliriz:
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray, mask=mask)8. Ortalama Renk veya Ortalama Yoğunluk
Burada bir nesnenin ortalama rengini bulabiliriz. Veya gri tonlamalı modda nesnenin ortalama yoğunluğu olabilir. Yine aynı maskeyi kullanırız:
mean_val = cv.mean(im, mask=mask)9. En Uç Noktalar
En uç noktalar nesnenin en üstteki, en alttaki, en sağdaki ve en soldaki noktalarını ifade eder:
leftmost = tuple(cnt[cnt[:, :, 0].argmin()][0])
rightmost = tuple(cnt[cnt[:, :, 0].argmax()][0])
topmost = tuple(cnt[cnt[:, :, 1].argmin()][0])
bottommost = tuple(cnt[cnt[:, :, 1].argmax()][0])Örneğin bunu bir Hindistan haritasına uygularsam şu sonucu alıyorum:

Alıştırmalar
- Matlab regionprops dokümantasyonunda hâlâ bazı özellikler bulunmaktadır. Bunları uygulamayı deneyin.
Hakan Çelik


