Otomatik gölge silme, kenarlık tespiti ve kenarlıkların için doldurma


#1

Elimdeki veri setindeki resimler hava görüntüleridir. Her bir resimde birden fazla nesne vardır. Bu nesnelerin binary mask’lerini çıkarmak için bir kod yazdım. Kod aşağıdadır. Bu koda göre ;

  1. Nesnelerin gölgesini nasıl otomatik olarak yok edebilirim?

  2. Kenarlıkların içini otomatik olarak nasıl doldurabilirim?
    Teşekkürler…

     import cv2
     import numpy as np
     from matplotlib import pyplot as plt
     import argparse
     import glob
    
    def auto_canny(image, sigma=0.33):
    
       v = np.median(image)
      lower = int(max(0, (1.0 - sigma) * v))
      upper = int(min(255, (1.0 + sigma) * v))
      edged = cv2.Canny(image, lower, upper)
    
     return edged
    
     image = cv2.imread("2.png")
     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
     blurred = cv2.GaussianBlur(gray, (3, 3), 0)
    
     auto = auto_canny(blurred)
    
    cv2.imshow("Edges", np.hstack([auto]))
    cv2.waitKey(0)
    


#2

Gölge bulmanın kolay bir yolu yok benim bildiğim
Çalışma koşşullarına özel çalışmak gerekir

Kenarların içini doldurmak için
kenarları findContours ile bul ve drawContours ile çizgi tipi “FILLED” ile çizdirdiğinde içini doldurarak çizer
yada fillpoly fonksiyonu var


#5

Cevap için teşekkürler. Dediklerinizi yaptım. Bir nebze başarılı oldum. Denemeye devam…


#3

MOG veya MOG2 ile arka plan çıkarma yapmayı deneyebilirsin.
MOG içerisinde gölge tespiti mevcut. Buradaki eşik ve kernel değerleri ile uygun bir değer aralığı yakalayarak gölgeyi kaldırabilirsin ama farklı görüntülerde anlamsız sonuçlar alabilirsin.

https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.html

veya


#4

Cevap için çok teşekkür ederim. Dediğiniz yöntemleri uygulayacağım Ayrıca çok faydalı bir Github repository’niz var. Ayrıca bunun için de çok teşekkürler.