İki görüntüyü karşılaştırmak ve aralarındaki benzerliği bulmak, görüntü işleme dünyasında sıkça karşılaşılan bir problemdir. En temel yöntem, görüntüleri birer matris olarak düşünüp piksel piksel kıyaslamaktır. Ancak modern ihtiyaçlar için farklı ve daha gelişmiş teknikler de mevcuttur.
1. Piksel Tabanlı Karşılaştırma (Temel Yöntem)
Bilgisayarlar görüntüleri sayısal matrisler olarak görür. RGB bir görüntü; Kırmızı, Yeşil ve Mavi olmak üzere üç katmandan oluşurken, gri tonlamalı (grayscale) bir görüntü tek katmanlı bir matris ile ifade edilir.
En basit yaklaşım, iki görüntünün (aynı boyutta olduklarını varsayarsak) tüm piksellerini tek tek gezerek aradaki renk farkına bakmaktır. Eğer fark 0 ise görüntüler birebir aynıdır.
C# ile Piksel Farkı Hesaplama Örneği
Aşağıdaki C# örneği, iki resim arasındaki farkı piksel bazında hesaplayarak yüzeysel bir benzerlik oranı çıkarır:
public float CalculateSimilarity(Bitmap image1, Bitmap image2)
{
// Görüntü boyutları eşit olmalıdır
if (image1.Width != image2.Width || image1.Height != image2.Height)
{
throw new ArgumentException("Görüntü boyutları eşleşmiyor.");
}
float diff = 0;
for (int y = 0; y < image1.Height; y++)
{
for (int x = 0; x < image1.Width; x++)
{
// Piksel değerlerini al
Color pixel1 = image1.GetPixel(x, y);
Color pixel2 = image2.GetPixel(x, y);
// RGB kanalları için mutlak farkı topla (Normalize edilmiş: 0-255 arası)
diff += (float)Math.Abs(pixel1.R - pixel2.R) / 255;
diff += (float)Math.Abs(pixel1.G - pixel2.G) / 255;
diff += (float)Math.Abs(pixel1.B - pixel2.B) / 255;
}
}
// Toplam farkı piksel sayısına ve kanal sayısına (3) bölerek ortalamayı bul
return 100 * diff / (image1.Width * image1.Height * 3);
}
// Kullanım:
// float fark = CalculateSimilarity(new Bitmap("img1.jpg"), new Bitmap("img2.jpg"));
// Console.WriteLine("Fark Oranı: %{0}", fark);
Dezavantajları:
- Işık değişimlerine karşı çok hassastır. Aynı sahne farklı ışıkta çekilirse tamamen farklıymış gibi algılanabilir.
- Görüntüde kaydırma, döndürme veya ölçekleme varsa bu yöntem çalışmaz.
2. Görsel Farkı Tespit Etme (Difference Image)
Sadece oranı hesaplamak yerine, farklı olan bölgeleri görselleştirmek isteyebilirsiniz. Aşağıdaki kod, iki görseli kıyaslar ve sadece farklı olan pikselleri yeni bir görsel üzerine çizer:
public void CreateDifferenceImage(string path1, string path2, string outputPath)
{
Bitmap img1 = new Bitmap(path1);
Bitmap img2 = new Bitmap(path2);
Bitmap diffImg = new Bitmap(img1.Width, img1.Height);
for (int y = 0; y < img1.Height; y++)
{
for (int x = 0; x < img1.Width; x++)
{
Color c1 = img1.GetPixel(x, y);
Color c2 = img2.GetPixel(x, y);
// Eğer pikseller farklıysa, ikinci resimdeki pikseli al; aynıysa boş bırak
if (c1 != c2)
{
diffImg.SetPixel(x, y, c2);
}
}
}
diffImg.Save(outputPath);
}
3. Diğer Gelişmiş Benzerlik Teknikleri
Piksel tabanlı karşılaştırma çoğu gerçek dünya senaryosu için yetersizdir. İşte daha profesyonel yöntemler:
A. Histogram Karşılaştırma
Görüntüdeki renklerin dağılımını (histogram) analiz eder.
- Avantajı: Görüntü döndürülse veya hafifçe kaydırılsa bile renk dağılımı benzer kalacağı için benzerlik tespit edilebilir.
- Kullanım: OpenCV
compareHistfonksiyonu.
B. SSIM (Structural Similarity Index)
Piksel farkı yerine, insan gözünün algısına dayalı yapısal benzerliği ölçer. Parlaklık, kontrast ve yapısal bozulmaları dikkate alır.
- Avantajı: Sıkıştırma bozulmalarını veya gürültüyü, basit piksel farkından çok daha iyi analiz eder.
C. Özellik Eşleştirme (Feature Matching)
Görüntüdeki “ilgi çekici noktaları” (keypoints) bulur (köşeler, kenarlar vb.).
- Algoritmalar: SIFT, SURF, ORB.
- Avantajı: Görüntü döndürüldüğünde, küçültüldüğünde veya açısı değiştiğinde bile (örneğin bir logoyu karmaşık bir sahnede bulmak) çok başarılıdır.
D. Derin Öğrenme (Deep Learning)
Modern yapay zeka modelleri (CNN - Convolutional Neural Networks), görüntüleri sayısal vektörlere (embedding) dönüştürür.
- Yöntem: İki görüntünün vektörleri arasındaki uzaklık (örn. Cosine Similarity) hesaplanır.
- Avantajı: “Anlamsal” benzerliği bulur. Örneğin, iki farklı kedi fotoğrafının piksel değerleri çok farklı olsa da, bu yöntem ikisinin de “kedi” olduğunu anlayıp yüksek benzerlik verebilir.




