cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Python'da cv2.adaptiveThreshold() ile OpenCV Uyarlamalı Eşik Oluşturma

Giriş

Eşikleme, bir görüntüde temel bölütlemeyi gerçekleştirmek ve piksellerin ya 0 or 1 (Ya da 255 onları temsil etmek için tamsayılar kullanıyorsanız).

Tipik olarak, bir görüntüde basit arka plan-ön plan segmentasyonu gerçekleştirmek için eşiklemeyi kullanabilirsiniz ve bu, her piksel için basit bir teknikteki varyantlara indirgenir:

if pixel_value > threshold:
    pixel_value = MAX
else:
    pixel_value = 0

Basit eşiklemenin göze çarpan sorunları vardır ve oldukça saf girdi gerektirir, bu da onu birçok kullanım durumu için pek pratik olmaktan çıkarır. Ana suçlu, görüntünün tamamına uygulanan küresel bir eşiktir, oysa görüntüler, yapay olmadıkları sürece, kapsamlı eşiklerin çalışması için nadiren yeterince tekdüzedir.

Genel bir eşik, taranan sayfalarda siyah beyaz bir kitaptaki karakterleri ayırmada iyi sonuç verir. Aydınlatma koşulları sayfanın bölümleri arasında değişken olabileceğinden, küresel bir kesme noktasını gerçek verilere karşı çok hassas hale getirebileceğinden, aynı sayfanın bir telefon resminde genel bir eşik büyük olasılıkla başarısız olacaktır.

Bununla mücadele etmek için - istihdam edebiliriz yerel olarak bilinen bir teknik kullanılarak eşikler uyarlanabilir eşikleme. Görüntünün tüm kısımlarını aynı kuralla ele almak yerine, her biri için eşiği değiştirebiliriz. Yerel alan bu ona uygun görünüyor. Bu, eşiklemeyi aydınlatma, gürültü ve diğer faktörlerdeki değişikliklere karşı kısmen değişmez kılar. Global eşikten çok daha yararlı olmakla birlikte, eşiklemenin kendisi sınırlı, katı bir tekniktir ve en iyi şekilde segmentasyon yerine görüntü ön işlemede (özellikle atılacak görüntüleri belirleme söz konusu olduğunda) yardım için uygulanır.

Bağlam gerektiren daha hassas uygulamalar için, bilgisayarla görme alanındaki son gelişmeleri yönlendiren derin öğrenme de dahil olmak üzere daha gelişmiş teknikleri kullanmanız daha iyi olur.

OpenCV ile Uyarlanabilir Eşikleme

Bir açıdan çekilmiş, görüntünün bir bölümünün diğerinden daha fazla odaklandığı, değişken aydınlatma koşullarına sahip bir görüntü yükleyelim. Harold McGee'nin çektiğim bir fotoğrafı “Yiyecek ve Yemek Pişirme Üzerine” harika hizmet edecek!

img = cv2.imread('book.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

Şimdi, normal eşiklemeyi kullanarak, aralarında net bir renk farkı olduğu için harfleri arka plandan ayırmaya çalışabiliriz. Tüm kağıt rengi arka plan olarak ele alınacaktır. Eşiğin ne olması gerektiğini gerçekten bilmediğimiz için, görüntünün biraz iki modlu (çoğunlukla iki rengin hakim olduğu) olduğunu tahmin ederek iyi bir değer bulmak için Otsu'nun yöntemini uygulayalım:

img = cv2.imread('book.jpg')


gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

ret, mask = cv2.threshold(blurred, 0, 255, cv2.THRESH_OTSU)
print(f'Threshold: {ret}')

fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))

Sonuca bir göz atalım:

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Ah. Metnin sol kısmı büyük ölçüde soluk, oluk etrafındaki gölge görüntünün bir kısmını tamamen yemiş ve metin çok doygun! Bu, "vahşi" bir görüntüdür ve küresel eşikleme gibi kapsamlı kurallar iyi çalışmaz. Eşik ne olmalı? Görüntünün parçasına bağlıdır!

The cv2.adaptiveThreshold() yöntemi tam olarak bunu yapmamızı sağlar:

cv2.adaptiveThreshold(img, 
                      max_value, 
                      adaptive_method, 
                      threshold_method, 
                      block_size, 
                      C)

The adaptive_method Olabilir cv2.ADAPTIVE_THRESH_MEAN_C or cv2.ADAPTIVE_THRESH_GAUSSIAN_C, Burada C ayarladığınız son bağımsız değişkendir. Bu yöntemlerin her ikisi de söz konusu pikselin komşularına göre eşiği hesaplar. block_size Dikkate alınacak komşu sayısını belirler (mahallenin alanı).

ADAPTIVE_THRESH_MEAN_C komşuların ve kesintilerin ortalamasını alır C, süre ADAPTIVE_THRESH_GAUSSIAN_C komşuların ve kesintilerin gauss ağırlıklı toplamını alır C.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Aynı zamanda bir ikili hale getirme stratejisi belirlemenize olanak tanır, ancak bunlarla sınırlıdır. THRESH_BINARY ve THRESH_BINARY_INVve aralarında geçiş yapmak, neyin "arka plan" ve neyin "ön plan" olduğunu etkili bir şekilde değiştirecektir.

Yöntem sadece görüntünün maskesini döndürür - dönüş kodunu ve maskeyi değil. Uyarlanabilir eşiklemeyi kullanarak karakterleri öncekiyle aynı görüntüde bölümlere ayırmayı deneyelim:


img = cv2.imread('book.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)


mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_MEAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)


fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))
plt.tight_layout()

Bu, çok daha net bir görüntü ile sonuçlanır:

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Not: The block_size bağımsız değişken tek sayı olmalıdır.

Aynı şekilde, gauss eşiğini uygulayabiliriz:

mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)

Bu da sonunda oldukça tatmin edici bir görüntü üretir:

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Hem blok boyutu (komşu alan) hem de C burada ayarlanacak hiperparametrelerdir. Farklı değerler deneyin ve görüntünüzde en iyi sonucu vereni seçin. Genel olarak, gauss eşiği gürültüye karşı daha az duyarlıdır ve biraz daha kasvetli, daha temiz görüntüler üretir, ancak bu değişir ve girdiye bağlıdır.

Uyarlanabilir Eşik Sınırlamaları

Uyarlanabilir eşikleme ile, eşiklemenin kapsayıcı sınırlamasından kaçınabildik, ancak yine de nispeten katı ve renkli girdiler için harika çalışmıyor. Örneğin, bir makas görüntüsü ve farklı renklere sahip küçük bir kit yüklersek, uyarlanabilir eşikleme bile, belirli karanlık özelliklerin ana hatları çizilerek, ancak tüm nesneler dikkate alınmadan, onu gerçekten doğru şekilde segmentlere ayırma sorunlarına sahip olacaktır:

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Blok boyutunu değiştirirsek ve C, daha büyük yamaları aynı nesnenin parçası olarak kabul etmesini sağlayabiliriz, ancak daha sonra komşu boyutları oluştururken sorunlarla karşılaşırız. çok küresel, küresel eşikleme ile aynı kapsayıcı sorunlara geri dönüyoruz:

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Sonuç

Son yıllarda, ikili segmentasyon (burada yaptığımız gibi) ve çok etiketli segmentasyon (rasgele sayıda sınıfı kodlayabileceğiniz), çok daha güçlü ve esnek olan derin öğrenme ağları ile başarılı bir şekilde modellenmiştir. Ayrıca, küresel ve yerel bağlamı, bölümlere ayırdıkları görüntülere kodlayabilirler. Dezavantajı ise – onları eğitmek için verilere, ayrıca zamana ve uzmanlığa ihtiyacınız var.

Anında, basit eşikleme için OpenCV'yi kullanabilir ve küresel eşikleme stratejileri yerine uyarlanabilir eşiklemeyi kullanarak bazı sınırlamalarla mücadele edebilirsiniz. Doğru, üretim düzeyinde segmentasyon için sinir ağlarını kullanmak isteyeceksiniz.

Daha İleri Gitmek – Bilgisayarla Görme için Pratik Derin Öğrenme

Meraklı doğanız daha ileri gitmek istemenizi sağlıyor mu? bizim kontrol etmenizi öneririz Kurs: “Python ile Bilgisayarla Görme için Pratik Derin Öğrenme”.

cv2.adaptiveThreshold() PlatoBlockchain Veri Zekası ile Python'da OpenCV Uyarlanabilir Eşikleme. Dikey Arama. Ai.

Başka Bir Bilgisayarla Görme Kursu mu?

MNIST rakamları veya MNIST modası sınıflandırması yapmayacağız. Uzun zaman önce rollerine hizmet ettiler. Çok fazla öğrenme kaynağı, gelişmiş kara kutu mimarilerinin performans yükünü omuzlamasına izin vermeden önce temel veri kümelerine ve temel mimarilere odaklanıyor.

odaklanmak istiyoruz gizemden arındırma, pratiklik, anlayış, sezgi ve gerçek projeler. Öğrenmek istemek Nasıl bir fark yaratabilirsin? Beynimizin görüntüleri işleme biçiminden meme kanseri için araştırma düzeyinde bir derin öğrenme sınıflandırıcısı yazmaya, “halüsinasyon” gören derin öğrenme ağlarına, size ilkeleri ve teoriyi pratik çalışmalarla öğreterek, sizi aşağıdaki bilgilerle donatmaya kadar bir yolculuğa çıkaracağız. bilgisayar vizyonunu çözmek için derin öğrenmeyi uygulamada uzman olmak için teknik bilgi ve araçlar.

İçinde ne var?

  • Görmenin ilk ilkeleri ve bilgisayarlara “görmeyi” nasıl öğretebiliriz?
  • Bilgisayarla görmenin farklı görevleri ve uygulamaları
  • İşinizi kolaylaştıracak ticaret araçları
  • Bilgisayarla görü için veri kümelerini bulma, oluşturma ve kullanma
  • Evrişimli Sinir Ağlarının teorisi ve uygulaması
  • Veri kümelerinde etki alanı kayması, birlikte oluşma ve diğer önyargıları işleme
  • Öğrenimi aktarın ve başkalarının eğitim süresini ve hesaplama kaynaklarını kendi yararınıza kullanın
  • Son teknoloji bir meme kanseri sınıflandırıcısı oluşturmak ve eğitmek
  • Ana akım fikirlere sağlıklı bir şüphecilik dozu nasıl uygulanır ve yaygın olarak benimsenen tekniklerin sonuçları nasıl anlaşılır?
  • t-SNE ve PCA kullanarak ConvNet'in “kavram uzayını” görselleştirme
  • Şirketlerin daha iyi sonuçlar elde etmek için bilgisayarlı görme tekniklerini nasıl kullandıklarına dair vaka çalışmaları
  • Uygun model değerlendirmesi, gizli uzay görselleştirmesi ve modelin dikkatinin belirlenmesi
  • Alan araştırması yapmak, kendi veri kümelerinizi işlemek ve model testleri oluşturmak
  • Son teknoloji mimariler, fikirlerin ilerlemesi, onları benzersiz kılan nedir ve nasıl uygulanacağı
  • KerasCV – son teknoloji işlem hatları ve modeller oluşturmak için bir WIP kitaplığı
  • Makaleleri nasıl ayrıştırıp okuyabilir ve bunları kendiniz uygulayabilirsiniz
  • Uygulamanıza bağlı olarak model seçimi
  • Uçtan uca bir makine öğrenimi ardışık düzeni oluşturma
  • Daha Hızlı R-CNN'ler, RetinaNet'ler, SSD'ler ve YOLO ile nesne algılamada manzara ve sezgi
  • Örnek ve anlamsal segmentasyon
  • YOLOv5 ile Gerçek Zamanlı Nesne Tanıma
  • YOLOv5 Nesne Dedektörlerinin Eğitimi
  • KerasNLP (endüstri gücünde WIP kitaplığı) kullanarak Transformers ile çalışma
  • Görüntülerin altyazılarını oluşturmak için Transformers'ı ConvNets ile entegre etme
  • DeepDream
  • Bilgisayarla görme için Derin Öğrenme modeli optimizasyonu

Zaman Damgası:

Den fazla Yığın kötüye kullanımı