Blurring

Kategori: Computer Vision , 22 Ocak 2020 , JanFranco


Blurring, resmi bulanıklaştırma tekniğidir. Bu teknik bizim için önemli bir tekniktir. Kenar bulma algoritmaları, gürültülü yani yoğun noisy barındıran resimlerde başarılı olamazlar. Başarıyı artırmak için gürültüleri temizlememiz bunun için de blurring tekniğini kullanmamız gereklidir. Farklı teknikler de uygulunabilir ancak en etkili yollardan biri blurring tekniğidir.

Bir resmi bulanıklaştırmanın 6 farklı yolu vardır. Bunlardan ilki gama yöntemidir. Bir gamma değeri belirlenir ve resmin piksellerinin gama değeri kadar üssü alınır. Diğer beş teknikte ise kernel kullanılır. Kernel aslında basitçe anlatmak gerekirse bir matristir. Bu matrisi bir resim üzerinde pixel pixel kaydırarak element bazında çarpım yaparız ve yeni değerler ile yeni resim üretilmiş olur. Bu 5 teknikte, kernelin elemanları değişmektedir. İkinci teknik, kendi default kernelimizi oluşturmaktır. Üçüncü teknik averaj yöntemidir. cv2.blur methodu ile kernel boyutunu belirtiriz ve o boyutta birler matrisi oluşur. Matrisin elemanları, eleman sayısına bölünür. Yani ortalama alınır ve kernel resim üzerinde gezdirilir. Bu gezdirme işine Convolutional Process denmektedir. Deep Learning bölümünde bolca göreceğiz. Dördüncü teknik Gaussian Blur tekniğidir ve gaussian kerneli kullanılır. Beşinci teknik median tekniğidir. Bu ve bir sonraki teknik gürültülü resimler için oldukça kullanışlıdır. Altıncı teknik ise bilateral tekniğidir. Oldukça basit anlattık, kendiniz daha detaylıca araştırabilirsiniz. Kernel mantığını daha iyi anlayabilmek için aşağıdaki linki ziyaret edebilirsiniz, güzelce görselleştirilmiş:

http://setosa.io/ev/image-kernels/

OpenCV kütüphanesini kullanarak Python üzerinde blurring tekniklerini çalışalım. Kütüphaneleri ve görüntümüzü alalım:


import cv2
import numpy as np


def img_show(img2show, name="img"):
    cv2.imshow(name, img2show)
    cv2.waitKey(0)


img = cv2.imread('../data/bricks.jpg').astype(np.float)/255
img_show(img)
>>

Python blurring

Bu yazımızda resmi görüntülemek için bir fonksiyon kullandık. Zorunlu değil ancak kolaylık sağlamakta. Aynı zamanda gama tekniğini gerçekleştirebilmek için resmin pixel değerlerinin 0-1 arasında olması gerekli. Bunun için integer olan piksel değerlerini float tipine dönüştürüp 255'e bölebiliriz. Gama tekniği için np.power methodunu kullanacağız:


gamma = 1/4
res = np.power(img, gamma)
img_show(res)

gamma = 2
res = np.power(img, gamma)
img_show(res)
>>

Python blurring

Python blurring

Kendi kernelimizi oluşturalım. Tüm değerleri 0.04 yapalım:


kernel = np.ones((5, 5), dtype=np.float)/25
print(kernel)
blurWithKernel = cv2.filter2D(img, -1, kernel)
img_show(blurWithKernel, "kernel")

>>

[[0.04 0.04 0.04 0.04 0.04]
 [0.04 0.04 0.04 0.04 0.04]
 [0.04 0.04 0.04 0.04 0.04]
 [0.04 0.04 0.04 0.04 0.04]
 [0.04 0.04 0.04 0.04 0.04]]


Python blurring

blur methodunu kullanarak averaj tekniğini uygulayalım. blur methodu parametre olarak input resim ve kernel boyutu alır. Burada 5x5 boyutlu bir kernel oluşturduk. 5x5 ten 25 element olacak ve 1 ler matrisindeki tüm elementler 25 e bölünecek. Yani ortalama 0.25 olacak:


blurWithAvg = cv2.blur(img, (5, 5))
# 5x5 filter, each element = 1, applied filter / 25 for averaging
img_show(blurWithAvg, "avg")
>>

Python blurring

GaussianBlur tekniğini kullanalım. Method parametre olarak ekstra sigma değeri almakta:


blurWithGaussian = cv2.GaussianBlur(img, (5, 5), 10)
img_show(blurWithGaussian, "gaussian")
>>

Python blurring

Median ve bilateral tekniklerini uygulayalım:


img = cv2.imread('../data/bricks.jpg')

blurWithMedian = cv2.medianBlur(img, 5)
img_show(blurWithMedian, "median")

blurWithBilateral = cv2.bilateralFilter(img, 9, 75, 75)
img_show(blurWithBilateral, "bilateral")
>>

Python blurring

Python blurring


Sonraki Yazı: Morphology
Yorumlar

Henüz bir yorum bulunmuyor.