Gradients

Kategori: Computer Vision , 24 Ocak 2020 , JanFranco


Gradyanlar, yoğunluk veya renk değişimlerinin yönüdür. Bir resim düşünelim, yarısı beyaz ve o beyaz bölgeden diğer bölgeye doğru gittikçe pikseller koyulaşıyor. Bu durumda gradyanın yönü siyah bölgeye doğrudur. Resim üzerinden de görelim:

Gradients

Gradyanları anlamamız önemli çünkü obje tespitinde, obje takibinde hatta obje sınıflandırmada oldukça fazla kullanacağız. Python üzerinden OpenCV kütüphanesini kullanarak bir sudoku sayfasındaki kenarları tespit etmeye çalışalım. İlk olarak resmi ve kütüphaneleri alalım:


import cv2
import numpy as np
import matplotlib.pyplot as plt


def display_img(img2show):
    fig = plt.figure(figsize=(12, 10))
    ax = fig.add_subplot(111)
    ax.imshow(img2show, cmap='gray')
    plt.show()


img = cv2.imread('../data/sudoku.jpg', 0)
display_img(img)
>>

Gradients

Bazen Sobel-Feldman operatörü veya Sobel filtresi olarak adlandırılan Sobel operatörü, görüntü işlemede ve bilgisayarlı görmede, özellikle kenarları vurgulayan bir görüntü oluşturduğu kenar algılama algoritmaları içerisinde kullanılır. Operator 3x3 lük bir kernel kullanır. Resme soldan uygulanacaksa:


	    1   0  -1
Gx = 	2   0  -2
 	    1   0  -1
Resme sağdan uygulanacaksa:


	    1   2   1
Gy = 	0   0   0
       -1  -2  -1
Bu kerneller resim üzerinde gezdirilir, Convolutional işlem yapılır. Eğer x veya y ekseninden değil de iki taraftan da uygulamak istiyorsak yani tüm kenarları bulmak istiyorsak Laplace tekniğini kullanacağız:


sobelX = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobelY = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
laplacian = cv2.Laplacian(img, cv2.CV_64F)

display_img(sobelX)
display_img(sobelY)
display_img(laplacian)
>>

Gradients

Gradients

Gradients

Burada Sobel methodlarının ikinci parametreleri derinlik (64 bit), 3. parametreleri binary sayı alan X ekseni, 4. parametreleri binary sayı alan Y eksenidir. ksize ise kernel boyutudur (5x5). Eski yazılarımızda öğrendiğimiz teknikleri deneyerek kenarları daha belirgin hale getirmeye çalışalım, deneyler yapalım:


blended = cv2.addWeighted(src1=sobelX, alpha=0.5, src2=sobelY, beta=0.5, gamma=0)
display_img(blended)

kernel = np.ones((4, 4), np.uint8)
gradient = cv2.morphologyEx(blended, cv2.MORPH_GRADIENT, kernel)
display_img(gradient)

_, th = cv2.threshold(blended, 100, 255, cv2.THRESH_BINARY_INV)
display_img(th)

gradient = cv2.morphologyEx(laplacian, cv2.MORPH_GRADIENT, kernel)
display_img(gradient)
>>

Gradients

Gradients

Gradients

Gradients


Sonraki Yazı: Histograms
Yorumlar

Henüz bir yorum bulunmuyor.