Bilgisayarlı Görü

Bulanıklaştırma ve Keskinleştirme

Dr. Öğr. Üyesi Oğuz Emre Kural

2026

Giriş

Öğrenim Kazanımları

  • Bu derste:
    • Görüntü Yumuşatma (Blurring)
    • Görüntü Keskinleştirme

Blurring

Görüntü Yumuşatma

  • Görüntü yumuşatma (blurring), bir görüntüdeki yüksek frekanslı bileşenleri (ani değişimler, kenarlar, gürültü) azaltmak için uygulanan bir işleme yöntemidir.

Temel Amaçları:

  • Gürültüyü azaltmak
  • Görüntü detaylarını sadeleştirmek
  • Kenar tespit işlemleri öncesinde düşük frekanslı yapıları vurgulamak
  • Görüntüyü daha homojen hale getirmek

Blurring İşleminin Temel Prensibi

  • Görüntüdeki her piksel, kendi çevresindeki piksellerin belirli bir ağırlıkla ortalamasına göre yeniden hesaplanır.
  • Görüntü yumuşatma, sinyal işleme dünyasında bir Alçak Geçiren Filtre olarak bilinir.
  • Amacı: Görüntünün “alçak frekanslı” bileşenlerini (genel renkler, yavaş geçişler) korurken, “yüksek frekanslı” bileşenlerini (keskin kenarlar, gürültü, ince detaylar) bastırmaktır.

Matematiksel Temel Mantığı

Blurring işlemi, görüntü \(f(x,y)\) üzerinde bir filtre \(k(i,j)\) ile konvolüsyon yapılmasıyla elde edilir:

\[ g(x,y) = \sum_{i=-m}^{m} \sum_{j=-n}^{n} f(x+i, y+j) \cdot k(i,j) \]

Burada:

  • \(f(x,y)\): Orijinal görüntü
  • \(g(x,y)\): Bulanıklaştırılmış (blurred) görüntü
  • \(k(i,j)\): Uygulanan blur çekirdeği (kernel)

Konvolüsyon Nedir?

  • Konvolüsyon, kernel matrisini görüntü üzerinde kaydırarak her pozisyonda ağırlıklı çarpım toplamı almaktır:

\[ g(x, y) = \sum_{i=-1}^{1} \sum_{j=-1}^{1} f(x+i, y+j) \cdot k(i, j) \]

Burada:

  • \(f(x,y)\): Orijinal görüntüdeki piksel değeri
  • \(k(i,j)\): Kernel (filtre) matrisindeki ağırlık değeri
  • \(g(x,y)\): Yeni (filtrelenmiş) görüntüdeki piksel değeri

Blurring Teknikleri

  • Ortalama Filtreleme
  • Gauss Filtreleme
  • Medyan Filtreleme
  • Bilateral Filtreleme

Ortalama Filtreleme

  • Her pikselin değerini, kendi komşularındaki piksel değerlerinin aritmetik ortalaması ile değiştirir.
  • Gürültüyü azaltır, ancak kenarları da bulanıklaştırır.
  • Basit ve hızlıdır.

Kullanılan 3×3 Ortalama (Box) Filtresi:

\[ k = \frac{1}{9} \times \begin{bmatrix} 1 & 1 & 1 \\\\ 1 & 1 & 1 \\\\ 1 & 1 & 1 \end{bmatrix} \]

  • Tüm komşulara eşit ağırlık verir.
  • Yumuşak ama kenar kaybı fazladır.

Ortalama (Mean) filtre, tüm komşu piksellere eşit ağırlık verir. Bu durum:

  • Detayları gereğinden fazla yumuşatır.
  • Kenar bilgilerini bozar (kenar bulanıklığı).
  • Görsel olarak “yapay” bir bulanıklık hissi yaratır.

Çözüm:

  • Gerçek dünyadaki ışık dağılımı ve insan algısı, merkeze yakın piksellerin daha etkili olmasına neden olur.
  • Bu durum Gaussian dağılımı (çan eğrisi) ile modellenebilir.

Gauss Filtreleme

  • Komşu piksellerin ağırlıkları, bir Gaussian (çan eğrisi) dağılımına göre belirlenir.
  • Merkeze daha yakın piksellere daha yüksek ağırlık verilir.
  • Ortalama filtreden daha doğal ve yumuşak bir blur etkisi sağlar.
  • Gürültüyü azaltırken kenar yapısını kısmen korur.

Örnek 3×3 Gaussian Çekirdeği (σ ≈ 1.0):

\[ k = \frac{1}{16} \times \begin{bmatrix} 1 & 2 & 1 \\\\ 2 & 4 & 2 \\\\ 1 & 2 & 1 \end{bmatrix} \]

  • Merkez piksel daha fazla ağırlık alır.
  • Kenarları bir miktar korur.
  • Mean ve Gaussian filtreler, parazitli piksellerden (gürültü) doğrudan etkilenir.
  • Örneğin “salt & pepper” (tuz ve karabiber) gürültüsü varsa görüntü gürültüden etkilenecektir.
  • Bu nedenle medyan filter geliştirildi.

Medyan Filtreleme

  • Her pikseli, kendi komşuluk bölgesindeki medyan değeri ile değiştirir.

  • Özellikle tuz ve karabiber gürültüsü (salt-and-pepper noise) gibi ani parlaklık değişimlerine karşı çok etkilidir.

  • Kenarları daha iyi korur.

Medyan Hesabı (3×3 Örnek)

Giriş 3×3 bölgesi:

\[ \begin{bmatrix} 10 & 20 & 30 \\\\ 20 & 255 & 40 \\\\ 30 & 40 & 50 \end{bmatrix} \]

\[ [10,\; 20,\; 30,\; 20,\; 255,\; 40,\; 30,\; 40,\; 50] \]

\[ [10,\; 20,\; 20,\; 30,\; 30,\; 40,\; 40,\; 50,\; 255] \]

\[ \text{Median} = 30 \]

Örnek:

Giriş 3×3 bölgesi:

\[ \begin{bmatrix} 10 & 20 & 30 \\\\ 20 & 255 & 40 \\\\ 30 & 40 & 50 \end{bmatrix} \]

  • Ortadaki 255 “anormal” bir değer (gürültü).
  • Medyan: 30 olur.
  • Ortadaki piksel değeri 30 ile değiştirilir.
  • Gürültüyü bastırır, kenarları korur.

Bilateral Filtreleme

Bilateral filtreleme, görüntüyü yumuşatırken kenarları koruyan özel bir blur tekniğidir.
Hem konuma hem de parlaklık benzerliğine göre ağırlıklandırma yapar.

Bilateral Filtre Formülü

\[ I'(p) = \frac{1}{W_p} \sum_{q \in \Omega} I(q) \cdot G_s(\|p - q\|) \cdot G_r(|I(p) - I(q)|) \]

Burada:

  • \(I(p)\): Orijinal görüntüde p pikselinin değeri
  • \(I'(p)\): Yeni (filtrelenmiş) değer
  • \(q \in \Omega\): p’nin komşuları
  • \(G_s\): Uzamsal yakınlık fonksiyonu
  • \(G_r\): Yoğunluk benzerliği fonksiyonu
  • \(W_p\): Normalleştirme katsayısı (tüm ağırlıkların toplamı)

Ağırlıklar Nasıl Hesaplanır?

Uzamsal Ağırlık (konuma göre):

\[ G_s(d) = e^{- \frac{d^2}{2 \sigma_s^2}} \]

  • Yakın pikseller → daha fazla etki
  • \(σ_s\) büyükse → uzaklar da etkili olur

Yoğunluk Ağırlığı (değere göre):

\[ G_r(\Delta I) = e^{- \frac{(I(p)-I(q))^2}{2 \sigma_r^2}} \]

  • Parlaklığı benzer pikseller → daha fazla etki
  • \(σ_r\) küçükse → sadece çok benzer pikseller katkı sağlar

Adım Adım Bilateral Filtreleme

  1. Her piksel için komşuları dolaşılır.
  2. Her komşu için:
    • Ne kadar yakın?
    • Ne kadar benzer?
  3. Bu iki ağırlık çarpılır ve piksel değeriyle birlikte toplanır.
  4. Sonuç, ağırlıkların toplamına bölünerek normalize edilir.

Bilateral filtre, bir pikselin yeni değerini belirlerken komşularının “fikrini” alır. Ancak her komşuya eşit söz hakkı vermez:

  1. “Bana yakın oturanların sözü daha değerli.” (Uzamsal Yakınlık - \(G_s\))
  2. “Benimle aynı fikirde olanların (renk olarak bana benzeyenlerin) sözü daha da değerli.” (Yoğunluk Benzerliği - \(G_r\))

Sonuç: Kenarın diğer tarafındaki pikseller (farklı renkte olanlar) komitede olsalar bile fikirleri (ağırlıkları) çok düşük olduğu için sonucu etkileyemezler. Bu yüzden kenarlar korunur.

Instagram/Snapchat/TikTok Filtreleri ve Bilateral Filtre

Her gün onlarca insanın kullandığı ‘güzellik filtrelerini’ düşünün. Bu filtreler yüzünüzü pürüzsüzleştirirken gözlerinizi, dudaklarınızı ve saç tellerinizi nasıl keskin tutuyor? İşte bu, Bilateral Filtre’nin mükemmel bir örneğidir! Filtre, cildiniz gibi düşük detaylı ve tek renkli bölgeleri (bunlar birbirine ‘benzeyen’ piksellerdir) yoğun bir şekilde bulanıklaştırır, ancak göz ve dudak kenarları gibi yüksek kontrastlı yerlere (birbirine ‘benzemeyen’ pikseller) dokunmaz.

Otonom Araçlar

Örnek (Yumuşatma): “Tesla gibi otonom bir aracın kamerasından gelen görüntünün gürültülü olduğunu düşünün. Araç, şerit çizgilerini veya bir yayayı tespit etmeden önce, bu gürültüyü Gauss filtresi ile temizlemek zorundadır. Yani bu basit bulanıklaştırma işlemi, kelimenin tam anlamıyla hayat kurtaran bir ön işleme adımıdır.

Tıbbi Görüntüleme

Bir doktor, bir MR görüntüsündeki tümörün sınırlarını net olarak görmek istediğinde ne yapar? Tıpkı bizim öğrendiğimiz gibi, Unsharp Masking veya benzeri bir keskinleştirme tekniği kullanarak kenarları belirginleştirir. Doğru teşhis koymasına yardımcı olan şey, bu derste öğrendiğimiz temel prensiplerdir.

Örnek: “NASA, James Webb teleskobuyla çektiği galaksi fotoğraflarını yayınladığında gördüğümüz o inanılmaz detaylar aslında bi işleme sürecinin sonucudur. O görüntülerin ham hali genellikle daha az etkileyicidir. Görüntü işleme uzmanları, High-Boost Filtering gibi teknikler kullanarak yıldızları daha parlak, gaz bulutlarının kenarlarını daha keskin hale getirir.

Örnek Uygulama

Örnek 5×5 Giriş Matrisi

\[ A = \begin{bmatrix} 10 & 10 & 10 & 10 & 10 \\\\ 10 & 50 & 50 & 50 & 10 \\\\ 10 & 50 & 100 & 50 & 10 \\\\ 10 & 50 & 50 & 50 & 10 \\\\ 10 & 10 & 10 & 10 & 10 \end{bmatrix} \]

Ortalama (Mean) Filtre Uygulaması

Kullanılan 3×3 Ortalama (Box) filtresi:

\[ k = \frac{1}{9} \times \begin{bmatrix} 1 & 1 & 1 \\\\ 1 & 1 & 1 \\\\ 1 & 1 & 1 \end{bmatrix} \]

Her piksel, 3×3 bölgesinin aritmetik ortalaması ile değiştirilir.

Örnek hesaplama (Merkez Piksel - (2,2)):

\[ g(2,2) = \frac{1}{9} (50 + 50 + 50 + 50 + 100 + 50 + 50 + 50 + 50) = \frac{500}{9} \approx 56 \]

(Ortadaki 100 değeri ortalama alındığı için düşer.)

Gaussian Filtre Uygulaması

Kullanılan 3×3 Gaussian filtresi:

\[ k = \frac{1}{16} \times \begin{bmatrix} 1 & 2 & 1 \\\\ 2 & 4 & 2 \\\\ 1 & 2 & 1 \end{bmatrix} \]

Örnek hesaplama (Merkez Piksel - (2,2)):

\[ g(2,2) = \frac{1}{16} (50 \times 1 + 50 \times 2 + 50 \times 1 + 50 \times 2 + 100 \times 4 + 50 \times 2 + 50 \times 1 + 50 \times 2 + 50 \times 1) \]

\[ = \frac{1}{16} (50 + 100 + 50 + 100 + 400 + 100 + 50 + 100 + 50) \]

\[ = \frac{1000}{16} = 62.5 \]

Gaussian ortalamayı ağırlıklı aldığı için merkez değeri (100) biraz daha etkili olur.

Median Filtre Uygulaması

Merkez piksel için (2,2) çevresindeki değerler:

\[ [50, 50, 50, 50, 100, 50, 50, 50, 50] \]

Sıralandığında:

\[ [50, 50, 50, 50, 50, 50, 50, 50, 100] \]

Medyan değer: 50

Yani:

\[ g(2,2) = 50 \]

Median filtre, parlak pikseli baskılayarak etraftaki orta değer (50) ile değiştirir.

PSNR (Peak Signal-to-Noise Ratio) değerleri ile orjinal görsele göre karşılaştırma yaparsak:

Filtre Türü PSNR Değeri (dB)
Mean Blur 33.73 dB
Gaussian Blur 34.59 dB
Median Blur 35.48 dB
import cv2
import numpy as np
import matplotlib.pyplot as plt

# PSNR hesaplama fonksiyonu
def compute_psnr(original, processed):
    mse = np.mean((original - processed) ** 2)
    if mse == 0:
        return float('inf')  # Görüntüler tamamen aynıysa
    PIXEL_MAX = 255.0
    return 20 * np.log10(PIXEL_MAX / np.sqrt(mse))

# Görüntüyü gri tonlamalı oku
img = cv2.imread('../assets/images/lena.jpeg', cv2.IMREAD_GRAYSCALE)

# Mean, Gaussian, Median Blur
mean_blur = cv2.blur(img, (3, 3))
gaussian_blur = cv2.GaussianBlur(img, (3, 3), 0)
median_blur = cv2.medianBlur(img, 3)

# PSNR hesapla
psnr_mean = compute_psnr(img, mean_blur)
psnr_gaussian = compute_psnr(img, gaussian_blur)
psnr_median = compute_psnr(img, median_blur)

# Sonuçları yazdır
print(f"PSNR (Mean):     {psnr_mean:.2f} dB")
print(f"PSNR (Gaussian): {psnr_gaussian:.2f} dB")
print(f"PSNR (Median):   {psnr_median:.2f} dB")

Blur Karşılaştırma Örnekleri

Filtre Türü Gerçek Dünya Uygulaması
Mean Blur Basit fotoğraf yumuşatma, eski taranmış belgelerde arka plan temizliği
Gaussian Blur Fotoğraf makinesi yazılımlarında lens bulanıklığı simülasyonu
Median Blur Tuz ve karabiber gürültüsüne maruz kalmış tıbbi görüntülerin temizlenmesi
Bilateral Filter Portre fotoğrafçılığında yüz üzerindeki detaylı noise azaltımı

Görüntü Kesinleştirme (Image Sharpening)

  • Görüntü keskinleştirme, bir görüntüdeki kenarları, detayları ve sınırları daha belirgin hale getirmek için uygulanan bir işlemdir.
  • Bu işlem, özellikle bulanık (blurred) veya düşük kontrastlı görüntülerde detayları öne çıkarmak için kullanılır.

Amaç

  • Kenar geçişlerini daha keskin hâle getirmek
  • Görüntüdeki önemli yapıları (kontur, sınır, desen) vurgulamak
  • Görsel algıyı iyileştirmek (özellikle insan gözüyle algı için)

Temel Mantık: Yüksek Geçiren Filtreleme (High-Pass Filtering)

  • Keskinleştirme, yumuşatmanın tam tersidir ve Yüksek Geçiren Filtre mantığıyla çalışır.

  • Yüksek frekanslı bileşenleri (kenarlar, detaylar) vurgular veya geçirir.

  • Bu işlem matematiksel olarak, görüntüden onun bulanıklaştırılmış bir versiyonunun çıkarılmasıyla elde edilir:

    Detay (Maske) = Orijinal Görüntü − Bulanık Görüntü

    \(\text{HighPass}(f) = f - \text{LowPass}(f)\)

Nasıl Yapılır?

  • Görüntü keskinleştirme genellikle filtre çekirdekleri (kernel) ile yapılır.
  • Bu kernel, görüntüye konvolüsyon işlemiyle uygulanır.

Çekirdek Örneği

  • Keskinleştirme çekirdek (kernel) örneği:

\[ \begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix} \]

  • Bu çekirdek:
    • Merkezdeki pikseli kuvvetlendirir (5)
    • Komşuların etkisini azaltır (-1)
    • Kenarları belirginleştirir

Uygulama Alanları

Uygulama Açıklama
Medikal görüntüleme Lezyon/sınır belirginleştirme
Uydu görüntüleri Yüzey detaylarını öne çıkarma
OCR Yazı kenarlarını netleştirme
Genel görüntü iyileştirme Kontrastı ve algıyı artırma

Dikkat Edilmesi Gerekenler:

  • Gürültülü görüntülerde gürültüyü de keskinleştirir

  • Genellikle önce gürültü filtreleme, sonra keskinleştirme önerilir

  • Aşırı keskinleştirme sonucu halo etkisi (parlak kenarlar) oluşabilir

Laplace Filtresi ile Keskinleştirme

  • Laplacian filtresi, bir görüntünün ikinci türevini alır.
  • Kenarları, geçiş bölgelerinde oluşan ani değişimleri bulur.
  • X ve Y yönlerinde ayrı ayrı türev almaya gerek yoktur; tek seferde hem yatay hem dikey geçişlere hassastır.

Türevlerin Sezgisel Anlamı

Görüntüdeki bir piksel satırını bir yol profili gibi düşünelim:

  • Görüntü (Yoğunluk): Yolun yüksekliği. Düz alanlar düz yolu, kenarlar yokuşları temsil eder.

  • Birinci Türev (Eğim): Yolun eğimi. Kenarın varlığını ve yönünü söyler. Yokuşun başladığı yerdir.

  • İkinci Türev (Laplacian): Eğimdeki değişim hızı. Yokuşun en dik olduğu noktayı bulur. Bu yüzden kenarlara karşı çok hassastır.

Matematiksel Gösterim

Laplacian, bir görüntünün ikinci türevlerinin toplamı ile hesaplanır:

\[ \nabla^2 f(x, y) = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} \]

Laplace Kernel Örnekleri

4 Komşulu

\[ \begin{bmatrix} 0 & 1 & 0 \\\\ 1 & -4 & 1 \\\\ 0 & 1 & 0 \end{bmatrix} \]

8 Komşulu

\[ \begin{bmatrix} 1 & 1 & 1 \\\\ 1 & -8 & 1 \\\\ 1 & 1 & 1 \end{bmatrix} \]

Peki Neden İkinci Türev?

  • Birinci türev: Kenar bulur (yoğunluk değişimi).
  • İkinci türev: Değişimin nerede arttığını veya azaldığını bulur.

Yani:

  • Düz bölgelerde → ikinci türev ≈ 0
  • Kenar geçişlerinde → ikinci türev büyük olur
  • Kenarda yoğunluk artışı → pozitif değer
  • Kenarda yoğunluk azalması → negatif değer

Örnek

\[ A = \begin{bmatrix} 120 & 130 & 150 & 140 & 130 \\ 120 & 130 & 150 & 140 & 130 \\ 120 & 130 & 150 & 140 & 130 \\ 120 & 120 & 120 & 120 & 120 \\ 120 & 120 & 120 & 120 & 120 \end{bmatrix} \]

  • 2. sütunda 150’lik parlak bir kenar.
  • Komşuları 130-140 gibi yumuşak geçişler.

Laplacian Çekirdeği

\[ \text{Kernel} = \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} \]

Hesaplamalar

(0,2) Pikseli (Değer = 150)

Komşular:

  • Üst: 0 (padding)
  • Alt: 150
  • Sol: 130
  • Sağ: 140

\[ g(0,2) = (0) + (150) + (130) + (140) - (4 * 150) \]

\[ = 420 - 600 = -180 \]

(1,2) Pikseli (Değer = 150)

Komşular:

  • Üst: 150
  • Alt: 150
  • Sol: 130
  • Sağ: 140

\[ g(1,2) = (150) + (150) + (130) + (140) - (4 * 150) \]

\[ = 570 - 600 = -30 \]

(2,2) Pikseli (Değer = 150)

Komşular:

  • Üst: 150
  • Alt: 120
  • Sol: 130
  • Sağ: 140

\[ g(2,2) = (150) + (120) + (130) + (140) - (4 * 150) \]

\[ = 540 - 600 = -60 \]

Laplacian Sonuç Matrisi

\[ \text{Laplacian}(A) = \begin{bmatrix} 0 & 0 & -180 & 0 & 0 \\ 0 & 0 & -30 & 0 & 0 \\ 0 & 0 & -60 & 0 & 0 \\ 0 & 0 & 30 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} \]

Özet

  • Yumuşak kenarlar sharpening ile daha belirgin hale gelir.
  • Düşük kontrastlı kenarlar keskinleştirilir.
  • Laplacian ve sharpening birlikte kullanıldığında kenar algısı kuvvetlenir.

Unsharp Maskeleme

Unsharp Masking, adının aksine bir görüntüdeki kenarları daha keskin hale getirmek için kullanılan bir görüntü iyileştirme (sharpening) tekniğidir.

Temel Mantığı

  1. Görüntüyü bir blur filtresi ile yumuşat.
  2. Orijinal görüntüden bu yumuşatılmış versiyonu çıkar → Kenarları (high-frequency bileşenleri) izole et.
  3. Bu kenar haritasını, orijinal görüntüye geri ekle → Keskinlik artar.

Matematiksel Gösterim

Unsharp Masking formülü:

\[ g(x, y) = f(x, y) + \lambda \cdot (f(x, y) - f_b(x, y)) \]

Burada:

  • \(f(x, y)\): Orijinal görüntü
  • \(f_b(x, y)\): Blur (yumuşatılmış) görüntü
  • \(g(x, y)\): Sharpened (keskinleştirilmiş) görüntü
  • \(\lambda\): Kenar katkı katsayısı (genellikle 1)

Neden “Unsharp”?

  • Fotoğrafçılıkta “unsharp mask”, kenarları vurgulamak için önce blur uygulanması anlamına gelir.
  • Aslında blur (unsharp) halini çıkarmak, kenarı öne çıkarır.

Unsharp Masking Adımları

  1. Blur uygula:
    \(f_b(x,y) = \text{GaussianBlur}(f(x,y))\)

  2. Maskeyi çıkar:
    \(\text{Mask} = f(x,y) - f_b(x,y)\)

  3. Görüntüyü keskinleştir:
    \(g(x,y) = f(x,y) + \lambda \cdot \text{Mask}\)

Unsharp Masking Adımları (Akış Şeması)

[ Orijinal Görüntü ]
       |
       +----> [ Gaussian Blur Uygula ] ------> [ Bulanık Görüntü ]
       |
       |        (Orijinal - Bulanık)
       +-------------------------------------> [ Kenar Maskesi (Detaylar) ]
       |                                                 
       |         (Orijinal + Maske)                      
       +-------------------------------------> [ Keskinleştirilmiş Görüntü ]

Unsharp Sinyal Örneği

Yorum

  • Gaussian blur genellikle tercih edilir çünkü doğal geçişler oluşturur.
  • Keskinlik seviyesi \(\lambda\) ile kontrol edilir:
    • \(\lambda = 1\): doğal keskinlik
    • \(\lambda > 1\): daha agresif keskinlik
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Görüntüyü gri tonlamalı oku
img = cv2.imread('../assets/images/cameraman.png', cv2.IMREAD_GRAYSCALE)

# Ortalama (Mean) Blur
mean_blur = cv2.blur(img, (3, 3))

# Gaussian Blur
gaussian_blur = cv2.GaussianBlur(img, (3, 3), 0)

# Median Blur
median_blur = cv2.medianBlur(img, 3)
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Görüntüyü gri tonlamalı olarak yükle
img = cv2.imread('../assets/images/rice.png', cv2.IMREAD_GRAYSCALE)

# Gaussian Blur uygula
blurred = cv2.GaussianBlur(img, (5, 5), 0)

# Unsharp Masking: g(x,y) = 2f(x,y) - f_b(x,y)
unsharp = cv2.addWeighted(src1=img, alpha=2.0, src2=blurred, beta=-1.0, gamma=0)

High-Boost Filtering

High-Boost Filtering, keskinleştirme işlemini daha da ileri götüren bir tekniktir.
Sadece kenarları değil, aynı zamanda orijinal görüntünün genel parlaklığını ve detaylarını da vurgular.

Temel Fikir

Unsharp Masking’de:

\[ g(x, y) = f(x, y) + \lambda \cdot (f(x, y) - f_b(x, y)) \]

Yani:

  • Kenar maskesi çıkarılır \((f - f_b)\),
  • Orijinal görüntüye eklenir → detaylar öne çıkar.

High-Boost Filtering Formülü

High-Boost filtresi şu şekilde ifade edilir:

\[ g(x, y) = A \cdot f(x, y) - f_b(x, y) \]

Burada:

  • \(f(x,y)\): Orijinal görüntü
  • \(f_b(x,y)\): Blur uygulanmış (yumuşatılmış) görüntü
  • \(A\): High-boost kazanç katsayısı
  • \(g(x,y)\): Yeni keskinleştirilmiş görüntü

Notlar

  • Eğer ( A = 1 ) → Bu, klasik Unsharp Masking’dir: \[ g(x,y) = f(x,y) + (f(x,y) - f_b(x,y)) = 2f(x,y) - f_b(x,y) \]

  • Eğer ( A > 1 ) → Yalnızca kenarlar değil, orijinal görüntü de güçlendirilir.

High-Boost’un Amacı

  • Sadece kenarları vurgulamak yerine,
    orijinal görüntüdeki tüm detayları daha baskın hale getirmek.
  • Düşük kontrastlı veya bulanık görsellerde genel parlaklık ve yapı iyileştirmesi yapmak.

Parametre Etkisi

A (Kazanç Katsayısı) Etki
A = 1 Unsharp Masking ile aynı
A = 1.5 Hafif güçlendirme
A = 2 veya 3 Daha güçlü detay vurgulama
A >> 1 Aşırı kontrast → halo/parazit riski artar

Uygulama Adımları

  1. Gaussian blur (veya başka bir yumuşatma) ile ( f_b(x,y) ) elde edilir.
  2. High-Boost formülü ile çıkış hesaplanır: \[ g(x, y) = A \cdot f(x, y) - f_b(x, y) \]
  3. Sonuç normalize edilir ve görüntü formatına dönüştürülür.
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('../assets/images/rice.png', cv2.IMREAD_GRAYSCALE)

blurred = cv2.GaussianBlur(img, (5, 5), 0)

# High-Boost: A katsayısı belirlenir (örneğin 1.0 → unsharp, 1.5 ve 2.0 → high-boost)
A_values = [1.0, 2, 2.5]

# Görüntüleri saklamak için liste
outputs = []

for A in A_values:
    high_boost = cv2.addWeighted(src1=img, alpha=A, src2=blurred, beta=-1.0, gamma=0)
    outputs.append((A, high_boost))

Karşılaştırma

Teknik Formül Ne Yapar?
Unsharp Masking \(f + (f - f_b)\) Kenarları öne çıkarır
High-Boost Filtering \(A \cdot f - f_b\) Kenar + orijinal detayı vurgular

Özet: Yumuşatma vs. Keskinleştirme

Kavram Yumuşatma (Blurring) Keskinleştirme (Sharpening)
Amaç Gürültü azaltma, detayları sadeleştirme Detayları ve kenarları vurgulama
Frekans Domeni Alçak Geçiren Filtre (Low-Pass) Yüksek Geçiren Filtre (High-Pass)
Temel Mantık Pikselleri komşularına benzetme Pikselleri komşularından farklılaştırma
Örnek Yöntemler Gaussian Blur, Median Filter, Bilateral Laplacian Filter, Unsharp Masking