Renk İşlemleri
Renk alanları, görüntülerdeki renk bilgisinin nasıl organize edildiğini tanımlar. Farklı renk alanları, çeşitli görüntü işleme görevlerinde farklı avantajlar sağlar. Bu bölümde, OpenCV kullanarak yaygın renk dönüşümlerini nasıl gerçekleştireceğinizi inceleyeceğiz.
BGR'den Gri Tonlamaya Dönüşüm
Genellikle, bir görüntü işleme görevine başlamadan önce, görüntüyü gri tonlamaya çeviririz. Bu, algoritmanın daha hızlı çalışmasını sağlar çünkü işlenmesi gereken renk kanalı sayısını azaltır.
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
Gri tonlamaya dönüşüm, renkli bir görüntüyü tek bir yoğunluk kanalına indirger.
BGR'den HSV'ye Dönüşüm
HSV (Hue, Saturation, Value), özellikle renk filtreleme görevleri için kullanışlı olan başka bir renk uzayıdır. HSV, renk tonu (hue), doygunluk (saturation) ve değer (value) olmak üzere üç kanaldan oluşur.
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
cv.imshow('HSV', hsv)
HSV uzayı, özellikle belirli bir renk aralığını segmente etmek istediğinizde kullanışlıdır.
BGR'den Lab'ye Dönüşüm
Lab renk uzayı, insan gözünün renk algısını daha iyi taklit etmeye çalışır. Bu, renk tabanlı nesne algılama ve sınıflandırma görevlerinde özellikle faydalı olabilir.
lab = cv.cvtColor(img, cv.COLOR_BGR2LAB)
cv.imshow('LAB', lab)
Lab uzayı, ışık yoğunluğu (L) ve renk kanalları (a ve b*) olmak üzere üç kanala sahiptir.
BGR'den RGB'ye Dönüşüm
Görüntüleri görselleştirmek için genellikle RGB renk uzayını kullanırız. OpenCV görüntüleri BGR formatında saklar, bu yüzden görselleştirmeden önce onları RGB'ye çevirmemiz gerekebilir.
rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
cv.imshow('RGB', rgb)
Bu dönüşüm, özellikle görüntüleri matplotlib gibi kütüphanelerle görselleştirmek istediğinizde önemlidir.
HSV'den BGR'ye Dönüşüm
Bazen, HSV gibi alternatif bir renk uzayında işleme yaptıktan sonra orijinal BGR renk uzayına geri dönmek isteyebilirsiniz. Bu, sonuçları standart bir formatta görselleştirmek için gereklidir.
lab_bgr = cv.cvtColor(lab, cv.COLOR_LAB2BGR)
cv.imshow('LAB --> BGR', lab_bgr)
Bu dönüşüm, özellikle renk tabanlı işleme sonrasında orijinal renk uzayına geri dönmek istediğinizde yararlıdır.
Renk dönüşümleri sırasında veri kaybı olabilir. Her bir renk uzayının kendine özgü özellikleri ve kullanım durumları vardır. Dönüşümleri dikkatli bir şekilde seçin ve uygulayın.
Renk alanları, görüntü işleme ve analizinde güçlü araçlar sağlar. Uygulamanızın gereksinimlerine göre bu renk dönüşümlerini ve uzaylarını kullanarak, çeşitli görevlerde daha iyi sonuçlar elde edebilirsiniz.
Renk Kanalları
Renk kanalları, bir görüntünün renk bilgisini temsil eden bileşenlerdir. OpenCV'de, genellikle bir görüntü BGR (Mavi, Yeşil, Kırmızı) formatında saklanır. Bu bölümde, bir görüntünün renk kanallarını nasıl ayıracağımızı ve tekrar birleştireceğimizi inceleyeceğiz.
Renk Kanallarını Ayırma
Bir görüntüyü oluşturan renk kanallarını ayırmak için cv.split
fonksiyonunu kullanırız. Bu işlem, her bir renk kanalını ayrı bir matris olarak döndürür.
b, g, r = cv.split(img)
Bu, orijinal BGR görüntüsünden mavi, yeşil ve kırmızı kanalları ayırır.
Renk Kanallarını Görselleştirme
Her bir renk kanalını tek başına görselleştirmek için, diğer iki kanalı sıfır matrisi ile birleştirebiliriz. Bu, özgün renk kanalının görüntü üzerindeki etkisini görmemizi sağlar.
blue = cv.merge([b, blank, blank])
green = cv.merge([blank, g, blank])
red = cv.merge([blank, blank, r])
cv.imshow('Blue', blue)
cv.imshow('Green', green)
cv.imshow('Red', red)
Her bir merge
çağrısı, tek bir renk kanalını ve iki boş (siyah) kanalı birleştirir, böylece yalnızca ilgili renk görüntülenir.
Renk Kanallarını Birleştirme
Renk kanallarını tekrar birleştirmek için cv.merge
fonksiyonunu kullanırız. Bu işlem, ayrı ayrı renk kanallarını alır ve bunları tek bir BGR görüntüsünde birleştirir.
merged = cv.merge([b, g, r])
cv.imshow('Merged Image', merged)
Bu, orijinal BGR görüntüsünü tekrar oluşturur.
Boyut ve Şekil Bilgileri
Renk kanallarını ayırdığınızda, her bir kanalın boyutlarını kontrol etmek yararlıdır. Bu, görüntü işleme işlemlerinizin doğruluğunu doğrulamanıza yardımcı olur.
print(img.shape) # Orijinal görüntünün boyutları
print(b.shape) # Mavi kanalın boyutları
print(g.shape) # Yeşil kanalın boyutları
print(r.shape) # Kırmızı kanalın boyutları
Bu bilgiler, her bir renk kanalının yalnızca iki boyuta (yükseklik ve genişlik) sahip olduğunu, ancak orijinal görüntünün üç boyutlu (yükseklik, genişlik, renk kanalları) olduğunu gösterir.
Renk kanalları ile çalışırken, her bir kanalın boyut ve veri tipinin işleme uygun olduğundan emin olun. Gerekirse, görüntü boyutlarını ve veri tiplerini uygun şekilde ayarlayın.
Renk kanallarını anlamak ve manipüle etmek, görüntü işleme ve bilgisayar görüşü projelerinde önemli bir beceridir. Bu teknikler, renk tabanlı görüntü analizi ve işleme görevlerinde temel oluşturur.
Blurlama
Blurlama veya bulanıklaştırma, görüntülerdeki detayları azaltmak ve gürültüyü gidermek için kullanılan bir tekniktir. OpenCV, çeşitli bulanıklaştırma teknikleri sunar: Ortalama, Gauss, Medyan ve İki Taraflı blurlama. Her biri farklı senaryolarda kullanışlıdır.
Ortalama Blurlama
Ortalama blurlama, bir çekirdek (kernel) kullanarak görüntünün her bir pikselini çevresindeki piksellerin ortalaması ile değiştirir. Bu, görüntüyü yumuşatır ve gürültüyü azaltır.
average = cv.blur(img, (3,3))
cv.imshow('Average Blur', average)
Burada, (3,3)
çekirdek boyutu, bulanıklaştırmanın şiddetini belirler.
Gauss Blurlama
Gauss blurlama, ağırlıklı bir ortalama kullanarak her pikseli çevresindeki piksellerin Gauss dağılımına göre ağırlıklı ortalaması ile değiştirir. Bu, kenarları korurken gürültüyü etkili bir şekilde azaltır.
gauss = cv.GaussianBlur(img, (3,3), 0)
cv.imshow('Gaussian Blur', gauss)
(3,3)
çekirdek boyutu ve 0
sigma değeri, bulanıklık derecesini belirler.
Medyan Blurlama
Medyan blurlama, bir pikselin değerini çevresindeki piksellerin medyan değeri ile değiştirir. Bu teknik, tuz-ve-biber gürültüsü olarak bilinen gürültüyü gidermede özellikle etkilidir.
median = cv.medianBlur(img, 3)
cv.imshow('Median Blur', median)
Burada, 3
çekirdek boyutu, medyan hesaplaması için kullanılır.
İki Taraflı Blurlama
İki taraflı blurlama, hem uzay hem de renk farklılıklarını dikkate alır, böylece kenarları korurken gürültüyü azaltır. Bu, detayları korurken gürültüyü gidermede son derece etkilidir.
bilateral = cv.bilateralFilter(img, 10, 35, 25)
cv.imshow('Bilateral', bilateral)
Burada, 10
çap, 35
renk alanındaki sigma ve 25
uzay alanındaki sigma değeridir.
Farklı blurlama teknikleri, görüntünüzdeki gürültü türüne ve korumak istediğiniz detayların türüne bağlı olarak farklı sonuçlar üretebilir. Görüntüleme ve analiz gereksinimlerinize uygun olanı seçin.
Blurlama teknikleri, görüntü işleme ve analizde yaygın olarak kullanılan güçlü araçlardır. Doğru uygulandığında, gürültüyü azaltabilir ve görüntülerinizdeki önemli özellikleri vurgulayabilirler.