RSS
 

Resimleri Karşılaştırma Uygulaması – C#

22 Temmuz

Bir uygulama yazdığınızda kullanıcının resim yüklemesini istemiş olabilirsiniz. Örneğin bir şehre ait resimleri ekliyor peki kullanıcıyı aynı resimleri eklememesi için nasıl uyarabiliriz. Bunu iki resmi karşılaştıran algoritma kullanarak uygulayabiliriz. Bu karşılaştırma işlemini resimlerdeki 3 rengi kullanarak yapıyor. Kırmızı, Yeşil, Mavi.  Algoritma şu şekilde işliyor. İlk başta her resmin kırmızı,mavi ve yeşil renkler ne kadar bulunuyor bu değerler hesaplanıyor.

 

byte* p = (byte*)(void*)ptr; 
 
  //Bellek için dengeleme yapılıyor. 
 
  int dengeleme = bmpData.Stride - btmp.Width * 3; 
 
  int width = btmp.Width * 3; 
 
  for (int y = 0; y < btmp.Height; ++y) 
 
       { 
 
          for (int x = 0; x < width; ++x) 
 
           { 
 
               veri.kirmizi += p[0];           //Kırmızı değerleri alıyor 
 
               veri.yesil += p[1];            //Yeşil Değerleri alıyor 
 
               veri.mavi += p[2];            //Mavi değerleri alıyor 
 
               ++p; 
 
            } 
 
         p += dengeleme; 
 
      } 

Daha sonra iki resim karşılaştırılacağı vakit ilk resimde hangi renk fazla ise bu renge göre her iki resmin değerleri hesaplanıyor. Burdan sonuç değeri bulunuyor. Sonuç değeri 0 ve 1 aralığında döndürülüyor.

switch (fazlaOlanrenk)   //Hakim olan renge göre değerleri ata.        
 
     { 
 
         case 1: 
 
           { 
 
              Aort = Math.Abs(veriA.kirmizi / maxA); 
 
              Bort = Math.Abs(veriB.kirmizi / maxB); 
 
              sonuc = Math.Abs(Aort - Bort) / 2; 
 
              break
 
           } 
 
         case 2: 
 
           { 
 
              Aort = Math.Abs(veriA.yesil / maxA); 
 
              Bort = Math.Abs(veriB.yesil / maxB); 
 
              sonuc = Math.Abs(Aort - Bort) / 2; 
 
              break
 
           } 
 
         case 3: 
 
           { 
 
              Aort = Math.Abs(veriA.mavi / maxA); 
 
              Bort = Math.Abs(veriB.mavi / maxB); 
 
              sonuc = Math.Abs(Aort - Bort) / 2; 
 
              break
 
           } 
 
    } 
 
sonuc = Math.Abs((sonuc + 100) / 100); 
 
if(sonuc != 1.0) sonuc = (sonuc + 100) / 100; 
 
if (sonuc > 1.0) //0 iel 1 arası değer döndürmek için kontrol 
 
   { 
 
       sonuc -= 1.0; 
 
   } 
 
return sonuc;  

Yani 1 ise tamamemn aynı resim 0 ise hiç benzerlik yok. Ara değerlerde ise o değerlere göre benzerlik gösteriyor.  0,95 üstü değer benzerlik için yeterli bir değerdir ve çok küçük ayrıntılar dışında tamamen aynı resim demektir. Programı kullanırsanız yüzdelik olarak sonuç verdiği için bu değer program için %95‘tir.  Resim aynı fakat yön değiştirilmişse bu durumda da sonuç %100 olacaktır. Resmin boyutu değiştirilmiş fakat aynı resim ise yine sonuç %100 dönecektir. Görüldüğü gibi kuvvetli bir karşılaştırma algoritmasıdır. Fakat bu algoritmanında zayıf yönleri vardır örenğin aynı tonda çizilmiş farklı iki renk %100 sonucunu döndürecektir. Fakat iki resmi karşılaştırınca yoğun renk karışımı olcağı için bu olasılık çok düşüktür.


Programı indirmek için Tıkla


 

Yorum Yaz



 
 
  1. ÖmerCan TÜRE

    04.02.2011 13:47:30

    Bu programın kaynak kodlarını alma şansımız var mı acil lazım

     
  2. bekir bostancı

    13.06.2011 01:07:38

    süper olmuş ellerine sağlık

     
  3. miraç orhan

    20.12.2011 21:53:40

    program linki bozulmuş düzeltebilirmisiniz lazımda

     
 
İlgili Yazılar
İlgili Yazı Bulunamadı!