Konvolüsyon, görüntüdeki her pikselin çevresindeki komşu pikselleri bir çekirdek matrisiyle ağırlıklı olarak birleştirerek yeni bir görüntü üretir. Bu işlemle kenarları belirginleştirebilir, gürültüyü azaltabilir, görüntüyü bulanıklaştırabilir veya belirli yönlerdeki çizgileri ortaya çıkarabilirsiniz. Sonuç, seçtiğiniz çekirdeğe ve uygulama biçimine bağlıdır; konvolüsyon tek başına görüntünün ne içerdiğini anlamaz, yalnızca sayısal piksel değerlerini dönüştürür.
Bir görüntü matrisi üzerinde küçük bir matris, yani çekirdek (kernel) veya filtre gezdirilir. Çekirdeğin görüntüyle kapladığı bölgedeki karşılıklı değerler çarpılır, bu çarpımlar toplanır ve elde edilen değer çıktı görüntüsündeki ilgili piksele yazılır. Çekirdek her konuma uygulandığında yeni bir görüntü oluşur.
Örneğin yatay kenarları belirginleştirmek için şu varsayımsal 3×3 çekirdek kullanılabilir:
Görüntünün üst ve alt bölgeleri arasında büyük parlaklık farkı varsa çarpımların toplamı yüksek çıkar. Böylece yatay yönde güçlü değişim bulunan yerler açık veya koyu piksellerle öne çıkar. Düz ve benzer renkli bölgelerde ise toplam genellikle sıfıra yakın olur.
Konvolüsyonda kenar davranışı da önemlidir. Çekirdeğin görüntü sınırına geldiğinde dışarıdaki pikseller mevcut değildir. Uygulamaya göre görüntü sıfırlarla doldurulabilir, kenardaki piksel tekrarlanabilir veya yalnızca çekirdeğin tamamen sığdığı bölgeler hesaplanabilir. Bu seçim, çıktı boyutunu ve görüntünün kenarlarındaki sonucu değiştirir.
Aşağıdaki çekirdekler, konvolüsyonun farklı sonuçlar üretebildiğini gösterir. Değerlerin ölçeklenmesi ve çekirdeğin işaretleri, oluşan etkinin yönünü belirler.
Bu filtreler aynı görüntü üzerinde aynı sonucu vermez. Gürültü azaltma amacıyla kenar çıkarma çekirdeği kullanılırsa gürültü de kenar gibi güçlenebilir. Buna karşılık kenar tespitinden önce hafif bir yumuşatma uygulamak, küçük rastgele değişimlerin etkisini azaltabilir.
Aşağıdaki örnek, tek kanallı küçük bir görüntü üzerinde yatay kenar çekirdeğinin nasıl uygulandığını gösterir. Örnek, görüntü dosyası okumaz; işlem mantığını doğrudan görünür kılmak için varsayımsal bir piksel matrisi kullanır.
Bu matriste üst bölüm koyu, alt bölüm parlaktır. Çekirdek, bu geçişi yüksek değerlerle öne çıkarır; sonuç görüntüsünde yatay sınır belirginleşir. Gerçek bir uygulamada negatif değerler görüntü formatının izin verdiği aralığa dönüştürülür veya mutlak değerleri alınır. Aksi hâlde negatif sonuçlar doğrudan 8 bitlik piksel değerine yazılamaz.
Konvolüsyon bir nesnenin ne olduğunu kendiliğinden belirlemez. Yalnızca yerel piksel ilişkilerini işler. Kenar filtresi bir insanı, aracı veya metni tanımaz; bu nesnelerin sınırına benzeyen parlaklık değişimlerini üretir. Nesne tanıma gibi daha yüksek düzeyli görevlerde konvolüsyon katmanları genellikle başka işlemlerle ve çoğu zaman öğrenilmiş çekirdeklerle birlikte kullanılır.
Ayrıca çekirdek boyutu büyüdükçe hesaplama maliyeti ve komşuluk alanı artar. Büyük bir bulanıklaştırma çekirdeği daha geniş bölgeyi etkilerken küçük ayrıntıları kaybettirebilir. Bu nedenle çekirdek seçerken hedefi belirleyin: gürültü azaltma için yumuşatma, sınır bulma için yönlü kenar filtresi, ayrıntıyı öne çıkarma için keskinleştirme kullanılır. Sonucu değerlendirirken yalnız görüntünün daha belirgin görünmesine değil, istenmeyen gürültü ve yapay kenarların oluşup oluşmadığına da bakın.
Konvolüsyon nasıl çalışır?
Bir görüntü matrisi üzerinde küçük bir matris, yani çekirdek (kernel) veya filtre gezdirilir. Çekirdeğin görüntüyle kapladığı bölgedeki karşılıklı değerler çarpılır, bu çarpımlar toplanır ve elde edilen değer çıktı görüntüsündeki ilgili piksele yazılır. Çekirdek her konuma uygulandığında yeni bir görüntü oluşur.
Örneğin yatay kenarları belirginleştirmek için şu varsayımsal 3×3 çekirdek kullanılabilir:
Kod:
[[-1, -1, -1],
[ 0, 0, 0],
[ 1, 1, 1]]
Görüntünün üst ve alt bölgeleri arasında büyük parlaklık farkı varsa çarpımların toplamı yüksek çıkar. Böylece yatay yönde güçlü değişim bulunan yerler açık veya koyu piksellerle öne çıkar. Düz ve benzer renkli bölgelerde ise toplam genellikle sıfıra yakın olur.
Konvolüsyonda kenar davranışı da önemlidir. Çekirdeğin görüntü sınırına geldiğinde dışarıdaki pikseller mevcut değildir. Uygulamaya göre görüntü sıfırlarla doldurulabilir, kenardaki piksel tekrarlanabilir veya yalnızca çekirdeğin tamamen sığdığı bölgeler hesaplanabilir. Bu seçim, çıktı boyutunu ve görüntünün kenarlarındaki sonucu değiştirir.
Yaygın çekirdekler ve kullanım amaçları
Aşağıdaki çekirdekler, konvolüsyonun farklı sonuçlar üretebildiğini gösterir. Değerlerin ölçeklenmesi ve çekirdeğin işaretleri, oluşan etkinin yönünü belirler.
| Çekirdek türü | Tipik amaç | Çıktıda görülen etki |
|---|---|---|
| Ortalama veya kutu filtresi | Yumuşatma ve basit gürültü azaltma | Keskin ayrıntılar azalır |
| Gauss filtresi | Daha doğal bulanıklaştırma | Gürültü yumuşar, geçişler daha dengeli olur |
| Sobel yatay/dikey | Kenar ve yön bilgisi çıkarma | Belirli yöndeki parlaklık değişimleri öne çıkar |
| Keskinleştirme filtresi | Yerel kontrastı artırma | Kenarlar daha belirgin görünür, gürültü de artabilir |
Küçük bir Python örneği
Aşağıdaki örnek, tek kanallı küçük bir görüntü üzerinde yatay kenar çekirdeğinin nasıl uygulandığını gösterir. Örnek, görüntü dosyası okumaz; işlem mantığını doğrudan görünür kılmak için varsayımsal bir piksel matrisi kullanır.
Python:
image = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[255, 255, 255, 255, 255],
[255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255]
]
kernel = [
[-1, -1, -1],
[ 0, 0, 0],
[ 1, 1, 1]
]
result = []
for row in range(1, len(image) - 1):
output_row = []
for col in range(1, len(image[0]) - 1):
value = 0
for kr in range(3):
for kc in range(3):
value += image[row - 1 + kr][col - 1 + kc] * kernel[kr][kc]
output_row.append(value)
result.append(output_row)
print(result)
Bu matriste üst bölüm koyu, alt bölüm parlaktır. Çekirdek, bu geçişi yüksek değerlerle öne çıkarır; sonuç görüntüsünde yatay sınır belirginleşir. Gerçek bir uygulamada negatif değerler görüntü formatının izin verdiği aralığa dönüştürülür veya mutlak değerleri alınır. Aksi hâlde negatif sonuçlar doğrudan 8 bitlik piksel değerine yazılamaz.
Konvolüsyonun sınırları
Konvolüsyon bir nesnenin ne olduğunu kendiliğinden belirlemez. Yalnızca yerel piksel ilişkilerini işler. Kenar filtresi bir insanı, aracı veya metni tanımaz; bu nesnelerin sınırına benzeyen parlaklık değişimlerini üretir. Nesne tanıma gibi daha yüksek düzeyli görevlerde konvolüsyon katmanları genellikle başka işlemlerle ve çoğu zaman öğrenilmiş çekirdeklerle birlikte kullanılır.
Ayrıca çekirdek boyutu büyüdükçe hesaplama maliyeti ve komşuluk alanı artar. Büyük bir bulanıklaştırma çekirdeği daha geniş bölgeyi etkilerken küçük ayrıntıları kaybettirebilir. Bu nedenle çekirdek seçerken hedefi belirleyin: gürültü azaltma için yumuşatma, sınır bulma için yönlü kenar filtresi, ayrıntıyı öne çıkarma için keskinleştirme kullanılır. Sonucu değerlendirirken yalnız görüntünün daha belirgin görünmesine değil, istenmeyen gürültü ve yapay kenarların oluşup oluşmadığına da bakın.