Skip to main content

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.

Dikkat

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.

İpucu

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.

İpucu

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.