2026
🎓 Advanced Computer Vision
Bu ders, bilgisayarlı görünün temel prensiplerinden başlayarak, modern derin öğrenme tabanlı yöntemlere ve güncel araştırma konularına uzanan kapsamlı bir yolculuk sunmayı amaçlamaktadır.
Kazanımlar:
Tanım: Bilgisayarlı görü (Computer Vision), makinelere insan benzeri bir “görme” ve “anlama” yeteneği kazandırmayı hedefleyen bir bilim ve teknoloji alanıdır.
“How can we get computers to see and understand the visual world?”
Temel Amaç: Dijital görüntülerden veya videolardan anlamlı bilgiler çıkarmak.
Bu sadece görüntüleri “okumak” değil, aynı zamanda yorumlamak, analiz etmek ve karar vermek anlamına gelir.
Bilgisayarlı görü, modern teknolojinin temel taşlarından biridir.
| Alan | Uygulama Örnekleri |
|---|---|
| Otonom Sistemler | Sürücüsüz arabalar, dronlar, robotik |
| Tıp ve Sağlık | Medikal görüntü analizi (MR, CT), kanser tespiti |
| Güvenlik | Yüz tanıma, nesne takibi, anomali tespiti |
| Artırılmış Gerçeklik | Sanal nesneleri gerçek dünyaya yerleştirme (AR) |
| Perakende | Otomatik kasalar, envanter yönetimi |
| Tarım | Ürün rekoltesi tahmini, hastalık tespiti |
Matematiksel olarak, bir 2D dijital görüntü, \(f(x, y)\) fonksiyonu olarak modellenebilir.
Burada \((x, y)\) düzlemdeki konumu (koordinat), \(f\)’in o noktadaki değeri ise yoğunluk veya parlaklık seviyesini (intensity) temsil eder.
Piksel: Bir dijital görüntünün en küçük temel yapı taşıdır. Genellikle tek bir sayısal değer (gri seviye) veya bir dizi değer (renkli) ile temsil edilir.
Koordinat Sistemi:
img[row, col] veya img[y, x] kullanımına dikkat etmek kritiktir.Görsel: Bir grid üzerinde sol üst köşesi (0,0) olarak işaretlenmiş ve x, y eksenleri gösterilmiş piksel matrisi.
En basit görüntü türüdür. Her piksel tek bir sayı ile temsil edilir.
Bit Derinliği (Bit Depth): Bir pikselin alabileceği yoğunluk seviyelerinin sayısını belirler. - 8-bit Gri Seviye Görüntü: En yaygın olanıdır. - Her piksel \(2^8 = 256\) farklı değer alabilir. - Değer aralığı: [0, 255] - 0: Saf Siyah - 255: Saf Beyaz - Aradaki değerler: Gri tonları
Görsel: Siyah-beyaz bir fotoğraf ve yanında piksellerin sayısal değerlerini gösteren bir matris kesiti.
İnsan gözünün renk algısına en yakın model olan RGB (Red, Green, Blue) modelini kullanır.
(R, G, B) şeklinde bir demet (tuple).
(0, 0, 0): Siyah(255, 255, 255): Beyaz(255, 0, 0): KırmızıGörsel: Renkli bir fotoğrafın Kırmızı, Yeşil ve Mavi kanallarına ayrılmış hali. Her kanal bir gri seviye görüntü gibi görünür.
Çözünürlük (Resolution): Bir görüntüdeki piksel sayısını ifade eder ve genellikle Genişlik × Yükseklik olarak belirtilir. - Örnek: 1920 × 1080 (Full HD)
Bellekteki Boyut: Bir görüntünün bellekte ne kadar yer kapladığını hesaplayabiliriz.
Boyut (byte) = Genişlik × Yükseklik × Kanal Sayısı × (Bit Derinliği / 8)
Örnek: 8-bit, 512 × 512 piksel bir RGB görüntü: 512 × 512 × 3 × (8 / 8) = 786,432 byte ≈ 768 KB
Bu hesaplama, sıkıştırma uygulanmamış ham (raw) veri için geçerlidir. (JPEG, PNG gibi formatlar sıkıştırma kullanır.)
Bilgisayarlı görüdeki temel paradigma: Görüntüler birer matristir.
NumPy array).
(Yükseklik, Genişlik)(Yükseklik, Genişlik, 3)Bu temsil, lineer cebir ve matris operasyonlarını kullanarak görüntüler üzerinde güçlü manipülasyonlar yapmamızı sağlar.
Bu operasyonlar her bir piksele bağımsız olarak uygulanır (Point Operations).
Parlaklık (Brightness) Ayarı: Görüntüye sabit bir değer eklemek/çıkarmak. \(I_{out}(x, y) = I_{in}(x, y) + \beta\)
Kontrast (Contrast) Ayarı: Görüntüyü sabit bir değerle çarpmak/bölmek. \(I_{out}(x, y) = I_{in}(x, y) * \alpha\)
Not: Bu işlemler sonucunda değerler [0, 255] aralığının dışına çıkabilir. Bu duruma doyma (saturation) denir ve değerler bu aralığa kırpılmalıdır (clipping).
Histogram: Bir görüntüdeki piksel yoğunluk değerlerinin dağılımını gösteren bir grafiktir. - x-ekseni: Piksel değerleri (örn: 0-255) - y-ekseni: O değere sahip piksel sayısı (frekans)
Ne işe yarar?
Görsel: Yan yana bir karanlık, bir aydınlık ve bir düşük kontrastlı görüntü ile altlarında ilgili histogram grafikleri.
Bu derste ağırlıklı olarak OpenCV ve NumPy kütüphanelerini kullanacağız. Görselleştirme için ise Matplotlib.
OpenCV, görüntüleri diskten okumak için imread fonksiyonunu kullanır.
# Görüntüyü renkli olarak oku (varsayılan mod)
img_color = cv2.imread('assets/sample.jpg', cv2.IMREAD_COLOR)
# Görüntüyü gri seviye olarak oku
img_gray = cv2.imread('assets/sample.jpg', cv2.IMREAD_GRAYSCALE)
# Görüntü başarıyla okundu mu kontrol et
if img_color is None:
print("Hata: Görüntü yüklenemedi!")
else:
print("Görüntü başarıyla yüklendi.")Önemli Not: OpenCV görüntüleri varsayılan olarak BGR (Blue, Green, Red) formatında okur, RGB değil! Bu, Matplotlib gibi diğer kütüphanelerle çalışırken renklerin yanlış görünmesine neden olabilir.
Okunan görüntü bir NumPy array’idir. Bu sayede özelliklerine kolayca erişebiliriz.
# Görüntünün boyutlarını (yükseklik, genişlik, kanal) al
# Not: Gri seviye görüntülerde kanal sayısı olmaz.
height, width, channels = img_color.shape
print(f"Boyutlar: {height}x{width}, Kanal Sayısı: {channels}")
# Toplam piksel sayısı
print(f"Toplam Piksel: {img_color.size}")
# Veri tipi (genellikle uint8 - 8-bit unsigned integer)
print(f"Veri Tipi: {img_color.dtype}")Tek bir pikselin değerini veya belirli bir bölgeyi (Region of Interest - ROI) alabiliriz.
# (y, x) koordinatındaki pikselin BGR değerini al
# Koordinatların (satır, sütun) sırasında olduğuna dikkat edin!
px_val = img_color
print(f"Piksel (100, 50) değeri: {px_val}")
# Sadece Mavi (Blue) kanalının değerini al
blue_val = img_color # B=0, G=1, R=2
print(f"Piksel (100, 50) Mavi değeri: {blue_val}")
# Bir bölgeyi (ROI) kesip al
# Y-ekseninde 100'den 200'e, X-ekseninde 200'den 300'e kadar olan bölge
roi = img_color[100:200, 200:300]
# TODO: ROI'nin bir köşesindeki pikseli siyaha (0,0,0) ayarlayın ve sonucu gözlemleyin.
# img_color =```
---
## Renk Uzayı Dönüşümü: BGR -> RGB
Matplotlib ile doğru renklerde görüntüleme yapmak için BGR'den RGB'ye dönüşüm şarttır.
```python
# OpenCV'nin BGR formatını Matplotlib'in beklediği RGB formatına çevir
img_rgb = cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB)
# Görüntüleri görselleştirelim
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(img_color) # Renkler yanlış görünecek (BGR)
plt.title('OpenCV (BGR) ile Gösterim')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(img_rgb) # Renkler doğru görünecek (RGB)
plt.title('Matplotlib (RGB) ile Gösterim')
plt.axis('off')
plt.show()Görsel: Yan yana, renkleri bariz şekilde farklı olan (mavi ve kırmızı tonlarının yer değiştirdiği) iki aynı resim.
OpenCV veya Matplotlib kullanarak bir görüntünün histogramını hesaplayabiliriz.
# Gri seviye görüntünün histogramını hesaplayalım
# Matplotlib'in hist fonksiyonu daha pratiktir.
# .flatten() metodu 2D matrisi 1D bir diziye çevirir.
plt.figure(figsize=(8, 6))
plt.hist(img_gray.flatten(), 256,, color='gray')
plt.title('Gri Seviye Görüntü Histogramı')
plt.xlabel('Piksel Yoğunluğu')
plt.ylabel('Piksel Sayısı')
plt.xlim()
plt.grid(True)
plt.show()
# TODO: Renkli görüntünün her bir kanalı için ayrı ayrı histogram çizin.
# colors = ('b', 'g', 'r')
# for i, col in enumerate(colors):
# hist = cv2.calcHist([img_color], [i], None,,)
# plt.plot(hist, color = col)
# plt.show()Görsel: Bir gri seviye fotoğraf ve yanında ona ait histogram grafiği.
cv2.imread() ile okunan bir renkli görüntüde, img[0, 0] pikselinin ilk elemanı (img[0, 0, 0]) hangi renk kanalını temsil eder?
Görev: Temel Görüntü Manipülatörü
cv2.split). Her bir kanalı ayrı bir pencerede gri seviye görüntü olarak gösterin.beta) ve bir kontrast (alfa) değeri alan bir fonksiyon yazın.np.clip fonksiyonu ile sonuçları [0, 255] aralığında tutmayı unutmayın.alfa ve beta değerleriyle denemeler yapın.Dijital bir görüntü, temsil ettiği gerçek dünya sahnesinin “mükemmel” bir kopyası mıdır? Sensörler, lensler ve sayısallaştırma süreci, gerçek dünyadaki hangi bilgilerin kaybolmasına veya değişmesine neden olur?
Özet:
Gelecek Hafta (Hafta 2): Görüntü Filtreleme ve Konvolüsyon > Bu hafta piksellere tek tek odaklandık. Gelecek hafta, bir pikselin komşularıyla olan ilişkisini kullanarak daha anlamlı işlemler yapacağız. Gürültü azaltma, kenar bulma gibi temel ve güçlü tekniklerin kapısını aralayacağız. Bu, Konvolüsyonel Sinir Ağları’nın (CNN) temelini oluşturan konvolüsyon operasyonunu anlamak için ilk ve en önemli adım olacak.
Bilgisayarla Görü – OMÜ | 🏠