🖼️ Görüntü İşlemede Veri Artırma Teknikleri
Veri artırma (Data Augmentation), özellikle derin öğrenme modelleri için yetersiz veri setleriyle başa çıkmak amacıyla kullanılan güçlü bir tekniktir. Temel fikir, mevcut veri setinden yeni ve çeşitli örnekler türeterek modelin genelleme yeteneğini artırmaktır. Bu sayede, modelin ezberleme (overfitting) riski azalır ve daha iyi performans elde edilir.
- ⚙️ Temel Dönüşümler: Görüntüleri döndürme, ölçekleme, kırpma, yatay veya dikey olarak çevirme gibi basit dönüşümlerdir. Bu işlemler, görüntüdeki nesnelerin farklı pozisyonlarda ve boyutlarda görünmesini sağlayarak modelin daha esnek öğrenmesine yardımcı olur.
- 🌈 Renk Uzayı Manipülasyonları: Görüntülerin parlaklığını, kontrastını ve doygunluğunu değiştirerek farklı aydınlatma koşulları simüle edilebilir. Bu, modelin farklı ışıklandırma koşullarına daha iyi adapte olmasını sağlar.
- 🔀 Karıştırma ve Kesme Teknikleri: İki veya daha fazla görüntüyü karıştırarak veya keserek yeni örnekler oluşturulabilir. Bu teknikler, modelin farklı nesnelerin kombinasyonlarını öğrenmesine yardımcı olur.
- 👾 Gürültü Ekleme: Görüntülere rastgele gürültü ekleyerek modelin daha sağlam (robust) hale gelmesi sağlanabilir. Bu, modelin gerçek dünya verilerindeki gürültüye karşı daha dirençli olmasını sağlar.
🐍 Python ile Veri Artırma: Kod Örnekleri
Aşağıda, Python ve popüler görüntü işleme kütüphaneleri (örneğin, OpenCV ve Albumentations) kullanılarak veri artırma tekniklerinin nasıl uygulanabileceğine dair örnekler bulunmaktadır.
🔄 Döndürme (Rotation)
python
import cv2
import numpy as np
def rotate_image(image, angle):
"""Görüntüyü belirli bir açıyla döndürür."""
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
return rotated
# Örnek kullanım
image = cv2.imread("ornek_resim.jpg")
rotated_image = rotate_image(image, 45) # 45 derece döndür
cv2.imwrite("rotated_image.jpg", rotated_image)
📐 Ölçekleme (Scaling)
python
import cv2
def scale_image(image, scale_x, scale_y):
"""Görüntüyü belirli oranlarda ölçekler."""
resized = cv2.resize(image, None, fx=scale_x, fy=scale_y, interpolation = cv2.INTER_LINEAR)
return resized
# Örnek kullanım
image = cv2.imread("ornek_resim.jpg")
scaled_image = scale_image(image, 1.2, 0.8) # X ekseninde %20 büyüt, Y ekseninde %20 küçült
cv2.imwrite("scaled_image.jpg", scaled_image)
✂️ Kırpma (Cropping)
python
import cv2
def crop_image(image, x1, y1, x2, y2):
"""Görüntüyü belirli koordinatlar arasında kırpar."""
cropped_image = image[y1:y2, x1:x2]
return cropped_image
# Örnek kullanım
image = cv2.imread("ornek_resim.jpg")
cropped_image = crop_image(image, 50, 50, 200, 200) # (50,50) noktasından (200,200) noktasına kadar kırp
cv2.imwrite("cropped_image.jpg", cropped_image)
翻轉 Yatay Çevirme (Horizontal Flip)
python
import cv2
def flip_image_horizontally(image):
"""Görüntüyü yatay olarak çevirir."""
flipped_image = cv2.flip(image, 1) # 1 yatay çevirme için kullanılır
return flipped_image
# Örnek kullanım
image = cv2.imread("ornek_resim.jpg")
flipped_image = flip_image_horizontally(image)
cv2.imwrite("flipped_image.jpg", flipped_image)
🌟 Albumentations ile Daha Gelişmiş Veri Artırma
Albumentations, görüntü işleme için hızlı ve esnek bir Python kütüphanesidir. Birçok farklı veri artırma tekniğini destekler ve kullanımı kolay bir arayüze sahiptir.
python
import albumentations as A
import cv2
# Artırma dönüşümlerini tanımla
transform = A.Compose([
A.RandomCrop(width=256, height=256),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
])
# Görüntüyü oku
image = cv2.imread("ornek_resim.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Albumentations RGB formatını bekler
# Artırma uygula
transformed = transform(image=image)
transformed_image = transformed["image"]
# Görüntüyü kaydet
cv2.imwrite("albumentations_transformed_image.jpg", cv2.cvtColor(transformed_image, cv2.COLOR_RGB2BGR))
Bu örnekte, rastgele kırpma, yatay çevirme ve rastgele parlaklık/kontrast değişiklikleri uygulanmaktadır. Albumentations ile daha karmaşık dönüşümler de kolayca tanımlanabilir.
Veri artırma, görüntü işleme projelerinde modelin performansını artırmak için vazgeçilmez bir tekniktir. Farklı teknikleri deneyerek ve veri setinize uygun olanları seçerek, daha başarılı sonuçlar elde edebilirsiniz.