Yön gradyan histogramının nasıl anlaşılacağını öğrenen görüntü (Gradyan Histogramı)

Leifeng.com'un notu: Bu makalenin yazarı Slyne_D, orijinal metin yazarın kısa kitabının ana sayfasında yayınlanır ve Leifeng.com yayınlama yetkisine sahiptir.

Bu makale esas olarak Yönlendirilmiş Gradyanların Histogramı makalesini çevirir.

Özellik Tanımlayıcı

Özellik tanımlayıcı, yararlı bilgileri çıkaran ve ilgisiz bilgileri atan görüntünün temsilidir. Genellikle özellik tanımlayıcı bir w * h * 3 (genişlik ve yükseklik 3, 3 kanal) görüntüsünü n uzunluğunda bir vektör / matrise dönüştürür. Örneğin, 64 * 128 * 3 görüntü için, görüntü vektör çıktısının dönüştürmeden sonraki uzunluğu 3780 olabilir.

Ne tür özellikler faydalıdır? Bir resimdeki giysilerin üzerindeki düğmeleri tahmin etmek istediğimizi varsayalım. Düğmeler genellikle yuvarlaktır ve birkaç deliğe sahiptir. Ardından, resmi yalnızca kenarları olan bir görüntüye dönüştürmek için kenar algılayıcıyı kullanabilir ve ardından Kolayca ayırt edilebilir, bu nedenle bu resmin kenar bilgileri kullanışlıdır ve renk bilgisi işe yaramaz. Ve iyi özellikler, düğmeler ve diğer yuvarlak şeyler arasındaki farkı ayırt edebilmelidir.

Yönlü gradyanların (HOG) histogramında, gradyanların yönlü dağılımı bir özellik olarak kullanılır. Bir resmin X ve Y ekseni boyunca gradyan çok kullanışlıdır, çünkü kenarlar ve köşelerdeki gradyan değerleri çok büyüktür, kenarların ve köşelerin çok sayıda nesne şekli bilgisi içerdiğini biliyoruz.

(HOG özellik tanımlayıcısı bir uzunlukla sınırlı olmayabilir, aynı zamanda birçok başka uzunlukta olabilir. Burada yalnızca bir hesaplama yöntemi kaydedilir.)

Yönlü gradyan histogramı nasıl hesaplanır?

Önce görüntünün bir yamasıyla açıklayacağız.

İlk adım: ön işleme

Yamalar herhangi bir boyutta olabilir ancak sabit bir orana sahip olabilir. Örneğin, yamanın en boy oranı 1: 2 olduğunda yama boyutu 100 * 200, 128 * 256 veya 1000 * 2000 olabilir ancak 101 * 205 olamaz.

İşte 720 * 475 bir resim. HOG özelliğini hesaplamak için 100 * 200 boyutunda bir yama seçiyoruz, bu yamayı resimden çıkarıyoruz ve boyutu 64 * 128 olarak ayarlıyoruz.

hog_preprocess

2. Adım: Gradyan görüntüsünü hesaplayın

Önce yatay ve dikey gradyanları hesaplıyoruz ve ardından gradyanların histogramını hesaplıyoruz. Hesaplamak için aşağıdaki iki çekirdeği kullanabilir veya OpenCV'de 1 çekirdek boyutuna sahip Sobel operatörünü doğrudan kullanabilirsiniz.

horizontal_vertical_gradient_kernel

OpenCV'yi arama kodu aşağıdaki gibidir:

// C ++ gradyan hesaplaması.

// Resmi oku

Mat img = imread ("bolt.png");

img.convertTo (img, CV_32F, 1 / 255.0);

// degradeleri hesaplayın gx, gy

Mat gx, gy;

Sobel (img, gx, CV_32F, 1, 0, 1);

Sobel (img, gy, CV_32F, 0, 1, 1);

# Python gradyan hesaplaması

# İmageim = cv2.imread ('bolt.png') okuyun

im = np.float32 (im) / 255.0

# Gradyanı hesapla

gx = cv2.Sobel (img, cv2.CV_32F, 1, 0, ksize = 1)

gy = cv2.Sobel (img, cv2.CV_32F, 0, 1, ksize = 1)

Ardından, gradyan büyüklüğünü g ve yön teta'yı hesaplamak için aşağıdaki formülü kullanın:

gradient_direction_formula

OpenCV'nin cartToPolar işlevi ile hesaplanabilir:

// C ++ Gradyan büyüklüğünü ve yönünü (derece cinsinden) hesaplayın

Mat mag, açı;

cartToPolar (gx, gy, mag, açı, 1);

# Python Gradyan büyüklüğünü ve yönünü (derece cinsinden) hesaplayın mag, angle = cv2.cartToPolar (gx, gy, angleInDegrees = True)

Hesaplanan gradyan haritası aşağıdaki gibidir:

Sol: x eksenindeki renk geçişinin mutlak değeri. Orta: y eksenindeki renk geçişinin mutlak değeri. Sağ: renk geçişinin büyüklüğü

Yukarıdaki görüntüden, x ekseni yönündeki eğimin esas olarak dikey yöndeki çizgileri vurguladığını, y ekseni yönündeki eğimin yatay yöndeki eğimi vurguladığını ve degrade genliğinin piksel değerlerindeki keskin değişiklikleri vurguladığını görebiliriz. (Not: Görüntünün başlangıç noktası görüntünün sol üst köşesidir, x ekseni yataydır ve y ekseni dikeydir)

Görüntünün degradesi, birçok gereksiz bilgiyi (sabit bir arka plan rengi gibi) kaldırır ve ana hatları vurgular. Başka bir deyişle, gradyan görüntüden bir kişiyi kolayca bulabilirsiniz.

Her pikselde bir büyüklük ve yön vardır Renkli bir resim için gradyan üç kanal üzerinden hesaplanır. Daha sonra, karşılık gelen genlik, üç kanaldaki en büyük genliktir ve açı (yön), en büyük genliğe karşılık gelen açıdır.

Adım 3: Gradyan histogramını 8 * 8 ızgarada hesaplayın

Bu adımda, yukarıdaki yama görüntüsü 8 * 8 ızgaraya (aşağıda gösterildiği gibi) bölünecek ve her ızgara için bir gradyan histogramı hesaplanacaktır. Öyleyse neden 8 * 8'e bölünüyor? Özellik tanımlayıcıları kullanmanın ana nedenlerinden biri, sıkıştırılmış / sıkıştırılmış bir gösterim sağlamalarıdır. Bir 8 * 8 görüntünün 8 * 8 * 3 = 192 piksel değeri vardır, her pikselin iki değeri vardır (büyüklük ve yön, üç kanal en büyük büyüklüğü alır), bu da 8 * 8 * 2'ye kadar ekler = 128, daha sonra bu 128 sayının 9 bölmeli bir histogram ile 9 sayı dizisi olarak nasıl temsil edilebileceğini göreceğiz. Sadece kompakt bir gösterim değil, aynı zamanda bir yamayı temsil eden bir histogram da daha fazla anti-gürültü olabilir Bir gradyan gürültülü olabilir, ancak bir histogram ile temsil edildikten sonra gürültüye çok duyarlı olmayacaktır.

Bu yamanın boyutu 64 * 128'dir ve 8 * 8 hücreye bölünmüştür, daha sonra toplam 64/8 * 128/8 = 8 * 16 = 128 ızgara vardır

64 * 128 yama için, 8 * 8 ızgara, yüzler, kafalar vb. Gibi ilginç özellikleri temsil edecek kadar büyüktür.

Histogram, 0, 20, 40, 60 ... 160 açılarını temsil eden 9 bölmeli bir vektördür.

Öncelikle her bir 8 * 8 hücresinin gradyanının neye benzediğine bir göz atalım:

Ortada: degradeyi gösteren oklu ızgara. Sağda: sayısal degradeli ızgara

Ortadaki şekildeki ok degradenin yönü ve uzunluk da gradyanın boyutudur Okun yönünün piksel yoğunluğu değişiminin yönü, genliğin ise yoğunluk değişiminin büyüklüğü olduğu görülebilir.

Sağdaki gradyan yönü matrisinde, açının 0-360 derece değil, 0-180 derece olduğunu görebilirsiniz. Buna "işaretsiz" gradyanlar denir, çünkü bir gradyan ve negatif sayısı aynı şeyi kullanır Bir sayı, gradyan okunun ve okun 180 derece döndürüldükten sonraki yönünün aynı kabul edildiğini gösterir. O zaman neden 0-360 derece kullanmıyorsunuz? Olayda, yaya algılama görevlerinde işaretsiz gradyanların işaretli gradyanlardan daha iyi olduğu bulundu. Bazı HOG uygulamaları, imzalı degradeler belirlemenize izin verir.

Bir sonraki adım, bu 8 * 8 ızgaralar için bir histogram oluşturmaktır Histogram 0, 20, 40, ... 160 açılarına karşılık gelen 9 bölme içerir.

Aşağıdaki resim bu süreci açıklamaktadır. Önceki görüntüde ızgaranın gradyan büyüklüğünü ve yönünü kullandık. Yöne göre hangi bölmenin kullanılacağını seçin ve ikincil değere göre bu bölmenin boyutunu belirleyin. İlk önce mavi çemberle çevrili piksellere bakın. Açısı 80 ve ikincil değer 2, bu nedenle beşinci bölmeye 2 ekler. Sonra kırmızı çemberle daire içine alınmış piksellere ve açısına bakın 10'dur ve ikincil değer 4'tür. 10 açısı, 0-20 derecenin ortasında (tam olarak yarısı) olduğundan, genlik 0 ve 20'lik iki bölmeye bölünmüştür.

Gradyan histogramı

İşte dikkat edilmesi gereken bir detay, eğer bir açı 160 dereceden büyükse, yani 160-180 derece arasındaysa, 0 ve 180 derecelerin aynı olduğunu biliyoruz, bu nedenle aşağıdaki örnekte piksel açısı 165 derecedir. Şu anda, genliği orantılı olarak 0 ve 160'lık kutulara koyun.

Açı 160'tan büyük olduğunda

9 bölmeli bir histogram oluşturmak için 8 * 8 hücresindeki tüm pikselleri bu 9 bölmeye ekleyin. Yukarıdaki ızgaraya karşılık gelen histogram aşağıdaki gibidir:

8 * 8 ızgara histogramı

Burada, temsilimizde, Y ekseni 0 derecedir (yukarıdan aşağıya). 0,180'lik bölmede dağıtılmış birçok değer olduğunu görebilirsiniz, bu aslında bu ızgaradaki gradyan yönlerinin çoğunun yukarı veya aşağı doğru olduğu anlamına gelir.

Adım 4:16 * 16 blok normalleştirme

Yukarıdaki adımlarda, görüntü tabanlı bir gradyan histogramı oluşturduk, ancak bir görüntünün eğimi tüm görüntünün ışığına çok duyarlıdır. Tüm pikselleri 2'ye bölerseniz, degradenin genliği de yarıya inecek ve histogramdaki değer de yarıya inecektir, bu nedenle bu, ışığın etkisini ortadan kaldırmaz. Bu nedenle ideal olarak, özellik tanımlayıcılarımızın ışık dönüşümünden bağımsız olmasını istiyoruz, bu nedenle histogramımızı ışık değişikliklerinden etkilenmeyecek şekilde normalleştirmek istiyoruz.

Önce vektörü l2 ile normalleştirme adımlarını düşünün:

v =

^ 0,5 = 146,64

Her bir öğeyi v'deki 146.64'e bölün.

Başka bir 2 * v vektörünü düşünün. Normalleştirmeden sonra vektör hala aynıdır. Normalleştirmenin ölçeği ortadan kaldırdığını anlayabilirsiniz.

Elimizdeki 9 * 1 histogramında doğrudan normalleştirmeyi düşünebilirsiniz.Bu da sorun değil, ancak daha iyi bir yol 16 * 16 bloktan normalize etmektir, yani 49 * 1 Histogramı 36 * 1 vektörde birleştirilir ve ardından normalleştirilir ve ardından pencere 8 piksel arkaya taşınır (animasyona bakın). Resmin tamamını geçmek için bu işlemi tekrarlayın.

hog-16x16-blok normalleştirme

Adım 5: HOG özellik vektörünü hesaplayın

Tüm yamanın öznitelik vektörünü hesaplamak için, 36 * 1 vektörün tümünü büyük bir vektör oluşturmak üzere birleştirmek gerekir. Vektörün boyutu şu şekilde hesaplanabilir:

  • Kaç tane 16 * 16 bloğumuz var? 7 yatay ve 15 dikey olmak üzere toplamda 7 * 15 = 105 hareket vardır.

  • Her 16 * 16 blok 36 * 1 vektörü temsil eder. Yani onları bir araya getirmek 36 * 105 = 3780 boyutlu vektördür.

  • HOG'u görselleştirin

    Genellikle HOG özellik tanımlayıcısı, aşağıdaki şekilde gösterildiği gibi, 8 * 8 ızgarada 9 * 1 normalleştirilmiş histogram çizmektir. Histogramın ana yönlerinin kişinin, özellikle de gövde ve bacakların şeklini yakaladığını görebilirsiniz.

    visualizing_histogram

    China Mobile sonunda bu yedi şehirde desteklenen ve ücretsiz olan Apple Watch hücresel hizmetini sağlıyor
    önceki
    Şaşırdım! "Fang Hua" ikinci haftada gişe şampiyonunu geçti mi?
    Sonraki
    Bu şehir aynı zamanda "Gümüş Şehir" olarak da bilinir, ancak artık "Akıllı Şehir" haline gelmiştir.
    Derin öğrenmeye dayalı insan davranışı tanıma algoritması
    Yann LeCun'un yeni çalışması: 473 modelin büyük bir karşılaştırması Çin, Japonya ve Kore'de metin sınıflandırması için ne tür kodlama kullanılmalıdır?
    Yuelu Zirvesi "Mobil Hunan Ordusu" nun Hunan'ın gelişimine nasıl yardımcı olduğunu görün
    TensorFlow derin öğrenmeye dayalı el yazısı rakam tanıma ve uygulama
    SUV, pazardaki karanlık atı kapıyor, sahne 580 bir sonlandırıcı olabilir
    Kuvvetli rüzgar ve şiddetli yağmur Quanzhou'ya baskın düzenledi! Ağaç küçük arabaya düştü! Lütfen Qingming'e geri dönün ...
    "Blog Makale Serisi" Xilinx-7Series-FPGA yüksek hızlı alıcı-verici öğrenme-RX alıcı girişi
    Genel evrim, yeni Kia K2 muhteşem dönüşümü
    "Endüstri Sıcak Noktaları" Yerli cipsler neden yetersiz? Gerçekten çünkü yapması zor
    Oyun Karakter Popülerlik Genel Seçimi 2018 Kadınlar 8 DAY1'de 16 Oylama Noktası
    Çalışan ailelerin araç satın alma ihtiyaçlarını karşılamak için 100.000 bağımsız evsel SUV
    To Top