Resim Yumuşatma ve Bulanıklaştırma

Created with Sketch.
  • Resimlerdeki keskin çizgileri azaltıp, yumuşak geçişler oluşturmayı ve resimlerdeki gürültüleri azaltmayı öğreneceksiniz.
  • Tüm bunları yapabilmek için bir çok yeni fonksiyonla tanışacaksınız, haydi bunları tek tek inceleyelim

Burada önemli bir kavramdan bahsederek işe başlayalım: “Blurring

Birebir çevirisi “bulanıklaşma” dır. Aslında görüntülerdeki bulanıklaşma durumunu birçok kişi tecrübe etmiştir. Kamera ile bir yeri çekmeye çalışırken bazen görüntüde bulanıklaşma olur. Bu nedenle görüntüdeki nesneler tüm keskin köşelerini kaybeder. OpenCV ile yapacağımız blurring işlemlerinin temelinde ise şu mantık vardır:

Pratikte yaptığımız şey, her pikselin renk değerlerini çevresindeki piksellerin renk değerleriyle karıştırmaktır. Bu şekilde sonuç olarak bulanık bir resim elde ederiz.

Öncelik bu makale boyunca kullanacağımız resmi projemize dahil edelim:

import cv2

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

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Şimdi sırasıyla bulanıklaştırma yöntemlerini inceleyelim:

1. Ortalama Alma (Averaging)

Bu yöntemi bir resme uygulayabilmek için öncellikle n x n‘lik bir dizey (matris) oluşturmamız gerekir. Oluşturduğumuz bu dizey, resim üzerinde soldan sağa ve yukarıdan aşağı doğru kayar. Bulunduğu her bir bölgenin merkezindeki pikselin çevresinde bulunan piksellerin ortalamasını alır. İşlem bu şekilde tüm resim taranana kadar devam eder.

Tarama işlemi yapan bu dizeye kernel” denir ve her zaman tek sayı olmak zorundadır. Kernel büyüdükçe bulanıklaşma da artar.

Bu işlemi gerçekleştirmek için kullanacağımız fonksiyon, cv2.blur(kaynak resim, kernel).

import cv2

img = cv2.imread('klon.jpg')
blurred = cv2.blur(img,(5,5))

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kaynak Resim

5×5 Kernel ile Bulanıklaştırılmış Resim
9×9 Kernel ile Bulanıklaştırılmış Resim

2. Gaussian Yöntemi

Bu yöntemi kullanarak aldığımız çıktılar, ortalama alma yöntemini kullanarak aldığımız çıktılara oldukça benzemektedir. Tek farkı burada ağırlıklı ortalama kullanılmasıdır. Averaging yönteminde basitçe sadece ortalama alınır.

Burada kullanacağımız fonksiyon, cv2.GaussianBlur(img, (5,5),0)

import cv2

img = cv2.imread('klon.jpg')
g_blurred = cv2.GaussianBlur(img, (5,5),0)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kaynak Resim
5×5 Kernel ile Bulanıklaştırılmış Resim
9×9 Kernel ile Bulanıklaştırılmış Resim

3. Median Yöntemi

Görüntülerde zaman zaman nokta büyüklüğünde istenmeyen gürültüler olabilir. Bunlara salt-pepper noise denir. Bunun nedeni resmin üzerine sanki tuz veya baharat dökülmüş gibi gözükmesidir. Konunun daha iyi anlaşılması için klon askerin zırhının üzerine siyah noktacıklar koydum.

Şimdi bu noktacıkları cv2.medianBlur() ile temizleyeceğiz. Fonksiyonun içine sırasıyla kaynak resmi ve kernel boyutunu gireriz. Öncelikle gürültü eklediğimiz resmimizi çağıralım:

import cv2

img = cv2.imread('g_klon.png')

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Şimdi median yöntemini uygulayalım ve sonuçlara bakalım:

import cv2

img = cv2.imread('g_klon.png')
median = cv2.medianBlur(img, 3)

cv2.imshow('image',median)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kernel Boyutu: 3
Kernel Boyutu: 7
Kernel Boyutu: 11

Farkettiyseniz resimdeki gürültüleri sileyim derken birçok kenarı da kaybettik. İşte tam da bu noktada yeni bir fonksiyona geçmemiz gerekecek

4. Bilateral Yöntemi

Şimdiye kadar gürültüleri temizlerken aynı zamanda kenarları da yumuşatıyorduk, daha doğrusu kenarları kaybediyorduk !

Hem gürültüleri azaltıp hem de kenarları korumak istiyorsak, bu durumda biletaral bulanıklaştırma yöntemini kullanacağız. Kullanacağımız fonksiyon: cv2.bilateralFilter(kaynak_resim, piksel_bölgesi_çapı, renk, alan)

import cv2

img = cv2.imread('g_klon.png')
bilateral = cv2.bilateralFilter(img, 5, 20, 20)

cv2.imshow('image',median)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dipçe: Bu yöntemde, resim üzerindeki gürültüler oldukça cılız olmalı. Örneğin bir önceki örnekteki gürültüleri temizlemede bu yöntem işe yaramayacaktır.

Yorum yapılmamış

Yorumunuzu ekleyin