Image Processing’de Dominant Rengin Bulunması

Selamlar;

Bugün image processing işlemlerinden en fazla kullanılan baskın rengi bulmaya çalışacağız. Kullanım yerleri sağlıkta renk körleri adına hastalık tespiti ve derecesi için yapılırken, trafikte ve basılı yayında dikkat çekicek işaretlerin populasyona göre renginin belirlenmesine, hatta reklamcılık sektöründe hangi renkte bannerların yani reklamların daha çok beyenildiğine dolayısı ile tıklandığına kadar gitmektedir. Hiçbir yaklaşımın %100 sonuç vermemesine karşın bana en yakın yöntemin üzerinde konuşacağız.

Öncelikle Image Upload yapıcağımız Index.cshtml’i aşağıdaki gibi Ajax Upload ile yazalım: Yükleme işleminden önce loader.gif gösterilmekte, işlem bittikten sonra da gizlenmektedir.

HomeController.cs: Aşağıda görüldüğü gibi ilgili resim Upload klasörüne ek yeni bir guid ismi ile kaydedilmektedir.

Şimdi geldik Imagedeki dominant rengin bulunmasına.

PictureAnalysis.cs: Aşağıda görüldüğü gibi image, yatay ve aşağa doğru pixel pixel iç içe forlar ile taranıp ilgili herbir pixel,  dictionary listesinde yok ise yeni atanıp var ise değeri bir arttırılmıştır. Daha sonra ençok kullanılan renk pixeli alınıp sınıfın static property’si olan MostDominantColor’a atanmıştır.

Şimdi sıra geldi PictureAnalysis.cs class’ının UploadImage() methodunda kullanılmasına: Aşağıda görüldüğü gibi upload edilen image işlenerek ençok kullanılan renk belirlenir. Daha sonra ilgili renk pixel’ine ait ismi GetColorName() methodu ile alınır. Baskın renk bulunduktan sonra fileName’i “æ” semboli ile ayrılarak dominant rengin ismi client’a gönderilir.

rgb

GetColorName(): Sisteme kayıtlı tüm renkler bir aşağıda görülen GetWebColors() ile çekildikten sonra ağırlıklı rengin Red, Green, Blue değerleri ile herbir çekilen sisteme ait rengin R, G, B değerleri farkı alınıp karesi ile temp değerine atılır. Bu temp değeri yani fark belirlediğimiz 500 değerinden küçük ise aradığımız rengi bulmuş oluruz.

2012-10-04_00-04-26

GetWebColors(): Reflection ile sisteme ait tüm renkler bir diziye atılır. Böylece yüklenen reklama ait baskın rengin, bu dizi içindeki renklerden hangisine en yakın olduğu bulunur.

ImageColor

Index.cshtml:  Aşağıdaki $(‘form’).ajaxForm kısmında success: kısmına alttaki kod eklenerek ilgili <table><tr id=“container”> içine yeni bir <td> eklenmektedir. İlgili resmin dominant  rengi, parametre olarak gelen “url” den ‘æ’ semboli ile ayrıldıktan sonra çevresi kırmızı bir <div> içine background rengi olarak adı ile birlikte gömülür. Daha sonra bu div yüklenen resimin üstüne konumlanır. Örnek çıktı yukarıda görüldüğü gibidir.

Yukarıdaki örnekte de görüldüğü gibi yüklenen bir image’in ağırlıklı renginin bulunması aslında istatistiksel bir ortalamadır. Bu işlemde, image’in büyüklüğü ve renk paletindeki çeşitlilik, toplam harcanacak süre ve doğruluk üzerindeki etkisi malesef negatif yani ters orantılıdır.  Birçok farklı alanda kullanılan digital imagelar, üzerlerinde yapılan processler ile bizi birçok dalda faydalı veriye ulaştıracağı red edilemez bir gerçektir.

Yeni bir makalede görüşmek üzere hoşçakalın.

Source Code: http://www.borakasmer.com/projects/ImageProcessing.rar

 

Herkes Görsün:

Sevebilirsin...

5 Yanıt

  1. Yigit Aktan diyor ki:

    Guzel makale olmus Bora. Eline saglik.

  2. Veli diyor ki:

    Hocam Selamlar;
    Yine çok güzel ve özgün bir makale. Elinize sağlık.
    Ankaradaki eventinize katılamadım ama mükemmel geçtiğini duydum. Saatlerce yazmışınız sonra direk hatasız çalışmış:)

    İyi çalışmalar.

  3. Yiğit diyor ki:

    Hocam selamlar,

    Sizden boyle degisik makaleler gormek guzel :)
    Elinize saglik..

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir