Okuldan Sonrası Ölüm (okul-ölüm)

Nisan 22, 2009 03:37 tarihinde dandelo tarafndan eklenmistir.

    Bir arkadaşımın "okuldan sonra ölüm gelir" şeklinde ifadesine önce şaşırarak sonra işin içinde bir bit yeniği arıyarak aklıma bazı fikirler geldi. İşin aslı; okul kelimesinin harflerinin her birinden bir sonra gelen harflerin oluşturduğu kelime "ölüm". Ne büyük tesadüf değilmi? Yaptığım ufak çaplı bir araştırma ile, 12703 kelime içinde sadece 8 kelime bu şekilde eşleşti. Bunların içinde 4 harfli eşleşme sadece 2 adet. "Nötr" be "Okul" kelimeleri.

 

   "Nötr" kelimesini Türkçe saymassak 12703 kelime içinde sadece bir adet eşleşme var; (okul-ölüm) eşleşmesi. Bunun oranı 0,000157 den daha az. Bu değerde okuldan sonra ölüm gelir tezinin tesadüf olma ihtimalini gösterir. Okulumun bitmesine son 2-3 ay kala(!) yaptığım ufak bir çalışmayı paylaşmak istiyorum. (okul_olum.rar)

   "İngilizce-Türkçe" sözlük veritabanından (sozluk.rar) sadece Türkçe kelimeleri alarak ufak bir veritabanı (kelimeler.mdb) oluşturdum.Dil olarak C#kullandığım programı bölüm bölüm açıklayalım. 

List<string> kelimeler = new List<string>();
List<string> eşleşmeler = new List<string>();
string harfler = "abcçdefgğhıijklmnoöprsştuüvyz-";

private void Form1_Load(object sender, EventArgs e)
{
    baglan();

    //tüm kelimeleri yaz
    int k = 0;
    foreach (var kelime in kelimeler)
    {
        listBox1.Items.Add(kelimeler[k].ToString());
        k++;
    }

    //tüm kelimeleri kontrol et
    for (int i = 0; i < kelimeler.Count; i++)
    {
        string al = kelimeler[i].ToString();
        string ver = "";

        foreach (char harf in al)
        {
            int sayı = harfler.IndexOf(harf);
            ver += harfler[sayı + 1];

        }

        if (kelimeler.Contains(ver))
        {
            listBox2.Items.Add(al + " - " + ver);
            eşleşmeler.Add(ver);
        }
    }

    int kelime_adet = kelimeler.Count;
    int eşleşme_adet = listBox2.Items.Count;

    double ikiharfli = eşleşmeler.Where(kelime => kelime.Length == 2).Count();
    double üçharfli = eşleşmeler.Where(kelime => kelime.Length == 3).Count();
    double dörtharfli = eşleşmeler.Where(kelime => kelime.Length == 4).Count();

    string metin = string.Format("{0} adet kelime içinde sadece {1} adet kelime eşleşmiştir."
        +" {2} kelime içinde {3} adet iki harfli, {4} adet üç harfli,"
        + " {5} adet dört harfli eşleşme vardır.\n\nDört harfli eşleşme ihtimali : {6} dır.",
        kelime_adet, eşleşme_adet,kelime_adet,ikiharfli,üçharfli,dörtharfli,dörtharfli/kelime_adet);

    richTextBox1.Text = metin;

}

İlk olarak bağlantı kurulup tüm kelimeler "kelimeler" listesine eklenmektedir. Daha sonra "kelimeler" içindeki tüm kelimeler dolaşılıp harflerinin bir sonraki harflerden oluşan kelime elde edilmektedir.

public void baglan()
{
    OleDbConnection baglanti = new OleDbConnection();
    baglanti.ConnectionString = @"Provider= Microsoft.Jet.OleDB.4.0;Data Source = kelimeler.mdb";

    string sorgu = "SELECT kelime FROM TBLkelimeler";
    try
    {
        baglanti.Open();
        komut = new OleDbCommand(sorgu, baglanti);
        tablo = komut.ExecuteReader();
        
        while (tablo.Read())
        {
            kelimeler.Add(tablo[0].ToString());    
        }
    }
    catch
    {
        MessageBox.Show("Hata!");

    }
    finally
    {
        baglanti.Close();
    }
}

Yeni kelime oluşturulur.

for (int i = 0; i < kelimeler.Count; i++)
{
    string al = kelimeler[i].ToString();
    string ver = "";

    foreach (char harf in al)
    {
        int sayı = harfler.IndexOf(harf);
        ver += harfler[sayı + 1];
    }

Yeni oluşan kelime, "kelimeler" içindeyse listbox'a eklenir.

if (kelimeler.Contains(ver))
    {
        listBox2.Items.Add(al + " - " + ver);
        eşleşmeler.Add(ver);
    }

}

Son olarakta eşleşmeler sayılıp oranlar hesaplanır.

int kelime_adet = kelimeler.Count;
int eşleşme_adet = listBox2.Items.Count;

double ikiharfli = eşleşmeler.Where(kelime => kelime.Length == 2).Count();
double üçharfli = eşleşmeler.Where(kelime => kelime.Length == 3).Count();
double dörtharfli = eşleşmeler.Where(kelime => kelime.Length == 4).Count();

string metin = string.Format("{0} adet kelime içinde sadece {1} adet kelime eşleşmiştir."
    +" {2} kelime içinde {3} adet iki harfli, {4} adet üç harfli,"
    + " {5} adet dört harfli eşleşme vardır.\n\nDört harfli eşleşme ihtimali : {6} dır.",
    kelime_adet, eşleşme_adet,kelime_adet,ikiharfli,üçharfli,dörtharfli,dörtharfli/kelime_adet);

 

Bu ufak ama önemli araştırma ile Doğal Dil İşleme üzerine ilk çalışmamı da yapmış oldum. Nice iyi çalışmalara...(Tabi okul bitmeden)

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

1 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

İnternet Akımları

Nisan 21, 2009 20:19 tarihinde dandelo tarafndan eklenmistir.

   İnternette kullandığım veya kullanılmasında yarar gördüğüm, belki de bazılarını bildiğiniz bir kaç siteden ve yeniliklerden bahsetmek istiyorum. Bunları kendi sözlerim yerine daha profesyonellerin anlatımlarını paylaşarak yapacağım.

Twitter

   Kısaca twitter, 140 karakterle "ne yapıyorsun?" sorusuna cevaplarınızı, sizi takip edenlere iletebilmeniz için web ve sms tabanlı hizmet sunan bir servis. Microbloging diye de anılan, blogun ufak hali. Arkadaşlarıyla devamlı bağlantıda olmak isteyenlerin ilgisini çekebilir. Sözü ustalarına bırakırsak şöyle: "Web Deneyimleri" ve şöyle: Vimeo iki link paylaşabilirim. İzleyin derim.

Twitter'a gidenler, burdan.

Friendfeed

    FriendFeed, arkadaşlarının ve ailenin internette buldukları ilginç şeyleri keşfetmene ve bunlar hakkında yorum yapmana yardımcı olan, bir çok platformu(Youtube, Facebook, Blog, Flickr vb.) birleştirip oralardaki etkinliklerinizi (favoriler,yeni mesajlar, sosyal imlemeler vb.) tüm arkadaşlarınızla paylaşabildiğiniz ve arkadaşlarınızın etkinliklerini de izleyebildiğiniz bir yer.

   Friendfeed her gün düzenli olarak takip ettiğiniz web sitelerini (bloglar, haber siteleri, youtube, flickr, twitter vs.) tek bir merkezden takip etmenizi mümkün kılıyor. Kendi bloglarınız ve sosyal ağlardaki hesaplarınızı sisteme tanıtarak sizi takip edenlere de büyük kolaylıklar sağlamış oluyorsunuz.Buradaki kısa anlatım ve buradaki güzel video Friendfeed'i derinlemesine anlatıyor.

Friendfeed ile bağlı kalın...

Rss

    RSS, genellikle haber sağlayıcıları, bloglar ve podcastler tarafından kullanılan, yeni eklenen içeriğin kolaylıkla takip edilmesini sağlayan özel bir XML dosya formatıdır. Kullandığı dosya biçimleri .rss ve .xml'dir.

      İnternet kullanıcısı RSS teknolojisi ile düzenli olarak içerik sunan sitelere abone olabilir ve çeşitli RSS istemcileri sayesinde içeriği takip edebilir. Site yöneticisi veya sahibi bu hizmeti sunmak için bir takım teknik düzenlemeler yapmalı ve uygun formatta XML'i RSS istemcisi talep ettiğinde göndermelidir. RSS olarak sunulan içerik web sitesinde sunulan içeriğin tamamını, özetini veya sadece başlığını içerebilir.

RSS kaynağı sağlayan internet sitelerinde genellikle şu ikonlar bulunur: Dosya:Rssicon 3614.gif Dosya:Small Orange XML Button for RSS Page.gif  [wiki

Yine Web Deneyimleri sitesinin sahibi Volkan Görgülü'den güzel bir video içerik -->> Rss Nedir?

Bloglama

     Blog, teknik bilgi gerektirmeden, kendi istedikleri şeyleri, kendi istedikleri şekilde yazan insanların oluşturdukları, günlüğe benzeyen web siteleridir.İngilizcedeki “web” ve “log” kelimelerinin birleşmesinden oluşan weblog kavramının zamanla yaygınlaşmış adıdır.

     Blog, genellikle güncelden eskiye doğru sıralanmış yazı ve yorumların yayınlandığı, web tabanlı bir yayını belirtir(Şuan gezmiş olsuğunuz site gibi :)). Çoğunlukla her gönderinin sonunda yazarın adı ve gönderi zamanı belirtilir. Yayıncının seçimine göre okuyucular yazılara yorum yapılabilir. Yorumlar, blog kültürünün çok önemli bir dinamiğidir; bu sayede yazar ve okuyucular arasında iletişim sağlanır. Bunun dışında, geri izleme (trackback) mekanizmasıyla, belirli bir yazı hakkında yazılan diğer yazıların belirlenebilmesi de mümkündür. [Blogcu Zade]

     Bir çok bedava ve kurulum gerektirmeyen blog servislerinin(Blogcu, Blogspot,Bloggum ...) yanı sıra, kendi domain(.com, .net vb.) ve sunucunuzu kullanabildiğiniz, istediğiniz biçimde şekillendirebildiğiniz hazır sistemler(Blogengine, Wordpress) mevcuttur.

Benim de şuan kullandığın, altyapı olarak Asp.Net kullanan, Blogengine'i özellikle tavsiye edebilirim. 

Blog yazarken(tabi açtıktan sonra) işinize yarayacak ipuçları, burdan. 


Yukarıda anlattıklarımdan benim de kullandıklarımın adresleri;

Twitter : http://twitter.com/farukterzioglu

Friendfeedhttp://friendfeed.com/farukterzioglu

Blog : http://www.farukterzioglu.com ve Rss'si : http://www.farukterzioglu.com/syndication.axd

 

Bunların haricinde devamlı takip ettiğim, yararlı bulduğum, gözden kaçtığını düşündüm bazı sitelerde paylaşmak istiyorum.

  - Kaliteli ve yararlı video içerikli siteler; 

  • Videolectures : Bilgisayar Bilimleri, Matematik, Fizik gibi bir çok alanda, profesyoneller tarafından oluşturulmuş video dersleri (ingilizce) bulundurur.
  • Ted : Bir çok konuda güzel konuşmaların(ingilizce) yer aldığı güzel bir site.
  • Sevenload :  Müzik, Dizi-Film, Sanat, Teknoloji ve daha birçok kategoride yayınlar bulunduran ve kendi yayınlarınızı oluşturabileceğiniz, kaliteli video içerik bulunduran sitede en eski Yeşil Çam filmlerini bile bulabilirsiniz.
  • Televidyon :Televizyon mantığında yayın yapan; mizah, belgesel, spor, teknoloji, yaşam ve sektör gibi programlarda güzel ve eğlenceli yayınlar bulabilceğiniz site.
  • Uzmantv : Eğitsel ve bilgilendirici videolar içeren sitede, Kolbastıda kadınlara özgü hangi hareketler var?, Iphone hakkında merak edilenler, Blog nasıl yazılır? gibi konular vardır.
  • Vimeo : Kullanıcı kaynaklı içeriklerin bulunduğu sitede gayet hoş videolar bulunmaktadır. Kısa film, sanatsal, bilimsel videolar gibi kaliteli içerikler olan, hoşça vakit geçirmek isteyenler için kirlenmemiş güzel bir video sitesi.

   - Hakia : Anlamsal (semantik) arama yapabildiğiniz arama motoru.
   - Gazopa : Elinizde olan bir resmin nerden geldiğini veya ne resmi olduğunu bulmanızı sağlayan ters mantık resim arama motoru. Kullanabilmek için üyelik gerekli.
   - Skydrive : Microsoft'un sağladığı, her türlü belge,resim, vb. leri depolayıp paylaşabildiğiniz site.
   - İstatistik öğrenmek için pratik e-kitap ve anlatımların olduğu, ingilizce hazırlanmış bir site, ve birde istatistik portalı

Bunların yanında severek takip ettiğim bir kaç siteyi de paylaşmak istiyorum. Açıklamasız olarak yazarsak ;

FZ Blogs, Fazlamesai, Düğümküme, Fikir Atölyesi, E-bergi ; Com. Eng. Turk, Yazgeliştir, C#Nedir?, Yapay Zeka, Derin Deli Mavi, Emekvar, Google...

 

Biraz uzun oldu, inşallah yararlıda olur. Bunlar ve daha bir çok siteyi muhafaza etmekte sıkıntı yaşıyorsanız Firefox'u ve favori çubuğunu tavsiye edebilirim. Ayriyetten favorilerinizi birçok bilgisayar arasında taşımak ve yedeklemek için "Foxmarks" isimli firefox eklentisini kullanabilirsiniz. 

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Faili Meçhul Kıyak (FMK)

Mart 26, 2009 09:35 tarihinde dandelo tarafndan eklenmistir.

     Bu internet nelere kâdir. Sadece ufak bir fikir olarak meydana çıkan bir olay, internetin sayesinde tüm medya organlarında duyurulan, salgın misali yayılan bir sosyal faliyete dönüştü. Bahsettiğim şey, Tunç Kılınç'ın müthiş fikri "Faili Meçhul Kıyak". Kısaca aşağıda yazdığı gibi, 'bir iyilik yap ve bıraktığın tek iz bir kart olsun'.  

 

 

  Fikir Atölyesi 'nin sahibi Tunç Kılınç'ın bir oyun oyanayalım diye ortaya attığı ve kendi tabiriyle "Tanımadığımız birilerine ufak bir iyilik yapıyoruz ve o kişi bunu kimin yaptığını bilmiyor. Çıkar düşünmeksizin kıyak yapmak ve o kişinin mutlu olmasını sağlamaktan söz ediyorum."diye bahsettiği müthiş olay. Oyundan bahsedersek , önce bir kartımız var;

Basitce tasarlanmış bu kartın sekiz adetini bir A4′e yerleştirdik. Dilerseniz bu A4′ü basıp sekiz tanesini aynı anda elde etmek mümkün. [Standart yazıcılar keşke lamine baskı da yapabilse!]

Baskı alabileceğiniz A4 boyutundaki dosyanın Word ve pdf formatları bu linklerde. Resim (.jpeg) olarak ise bu linkte bulabilirsiniz. (Yukarıdaki üç linkten birine sağ tıklayıp “save link as” veya “hedefi farklı kaydet” yaparak bilgisayara almak mümkün.)

Kart oyunun bulaşıcılığı ve devamı için gerekli. [Bir de "aa bak birisi burada ne unutmuş" denmemesi için!] Kime, ne zaman, hangi şartlarda bir kıyak yapacağımız da zaten belli olmaz. O yüzden bunları kesip cüzdanda taşıyoruz :)

    Örneğin birkaç uygulama örneği;

  • Birinin posta kutusuna gelen elektrik veya su faturasını alıp, ödemek. Sonrasında faturayı makbuz ve kartla beraber posta kutusuna geri koymak.
  • Haftalardır pis kalmış bir arabayı gece yıkamak ve sonrasında kartı sileceğe iliştirmek.
  • Vapur iskelesinde veya metroda turnikelerden birinin üstüne karta ataçlanmış bir jeton bırakmak.
  • Sipariş verdiğimiz (bir alana ikincisi bedava) pizzayı komşumuzun zilini çalarak kapısına bırakıp kaçmak (kart pizza kutusunun içinde.)

    Şimdiden bir çok gazete ve radyoda duyrusu yapılmış olan "Kıyak hareketi" bu hafta da Beyaz Show'a konu oluyor.    

    Tüm herşeyin ortaya çıktığı yer : Fikir Atölyesi 

    Nice kıyak günlere...

 

    Düzenleme : İzlemeyenler için Beyaz Show kayıtı -->>

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Görüntü İşleme (C#) - Uygulama

Mart 19, 2009 15:37 tarihinde dandelo tarafndan eklenmistir.

    Daha önce "burada" genel olarak bahsettiğim ve kullanılacak kod bloğunu tanıttığım "C# ile Görüntü İşleme"yi bir kaç örnek üzerinde anlatmaya çalışacağım.Bir görüntü üzerinde yapılabilecek işlemleri noktasal, alansal, toplamsal, biçimsel gibi alt kategorilere bölebiliriz.

    Öncelikli olarak noktasal işlemlerden bahsedersek, noktasal işlemler; görüntü üzerinde gözek gözek dolaşıp, her gözekin sadece kendi değerini değiştirdiğimiz işlemlerdir. Örnek olarak parlaklık(brightness) , zıtlık(contrast), gritona çevirme, negatif ve eşikleme gibi işlemleri verebiliriz. Alansal işlemler ise sadece bir gözekle değil birbirine komşu birkaç gözekle yapılan işlemlerdir. En bilinen örneği filtrelerdir. Örneğin bir resme medyan filtresi uygulamak istediğimizde seçilen yapısal elemana göre (3x3 veya 5x5) o bölgedeki tüm gözeklerin değeri hesaplanıp yapısal elemanın ortasındaki değere yazılır. Biçimsel işlemler, resmin renk değerlerinde değil de biçiminde yapılan değişikliklerdir. Balık gözü(fish eye), girdap(twirl) ve gözekleme(pixelate) gibi. Toplamsal işlemlere de Fourier dönüşümünü örnek verebiliriz.

    Noktasal işlemlerin birkaçından genel olarak bahsedip sadece parlaklık üzerinde duracağım. Diğer işlemlere de ilerleyen günlerde Kod Kütüphanesinde yer vereceğim.

    Bir gözeğin renk değerlerinin 0 ile 255 arasında değiştiğinden bahsetmiştik. Değerler 255 e yaklaştıkça o gözeğin parlaklığı artar. Bunun için bir resmin parlaklığını artırmak için , resmin tüm gözeklerinin renk değerlerini artırmalıyız. Kod üzerinde açıklarsak;

(daha basit ve anlaşılır olduğu için 32bitlik formatı tercih ettim.)

public Bitmap parlat(Bitmap resim, int değer)
        {
            unsafe
            {
                BitmapData bmpdata = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height),
                        ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

                byte* p = (byte*)bmpdata.Scan0;

                for (int i = 0; i < bmpdata.Height; i++)
                {
                    for (int h = 0; h < bmpdata.Width; h++)
                    {
                        p[0] =Convert.ToByte( p[0]+değer );
                        p[1] =Convert.ToByte( p[1]+değer );
                        p[2] =Convert.ToByte( p[2]+değer );

                        p += 4;
                    }
                }

                resim.UnlockBits(bmpdata);

                return resim;
            }
        }

    Burada 'resim' gözek gözek dolaşılmakta ve renk değerleri, girilen 'değer' parametresi kadar artırılmaktadır. Yalnız burda dikket edilmesi gerekilen nokta renk değerlerinin 0-255 arasında değişmesidir. Eğer değerler bu sınırı geçerse program hata verecektir. Onun için her artırmada değerler kontol edilip 255'i geçenler 255'e, 0'ın altına inenlerde 0'a eşitlenmelidir. Düzeltilmiş kısım ;

for (int i = 0; i < bmpdata.Height; i++)
{
    for (int h = 0; h < bmpdata.Width; h++)
    {  
        //mavi için
        if (p[0] + değer > 255)     p[0] = 255;  
        else if(p[0] + değer < 0 )  p[0] = 0 ;   
        else   p[0] =Convert.ToByte( p[0]+değer );

        //yeşil için
        if (p[1] + değer > 255)     p[1] = 255; 
        else if (p[1] + değer < 0)  p[1] = 0;    
        else  p[1] = Convert.ToByte( p[1] + değer);

        //kırmızı için
        if (p[2] + değer > 255)     p[2] = 255; 
        else if (p[2] + değer < 0)  p[2] = 0;    
        else  p[2] = Convert.ToByte(p[2] + değer);

        p += 4;
    }
}

  

    Bu yöntem pekde doğru bir algoritma olmayıp, görüntü işlemenin matnığını anlatmak için verdim. Parlaklık için çeşitli fonksiyonlar internette bulunabilir.

    Diğer noktasal işlemlerden biraz bahsedecek olursak; bir görüntünün tersini(negatifini), tüm gözeklerin renk değerlerini 255 den çıkararak elde ederiz. 

for (int i = 0; i < bmpdata.Height; i++)
{
    for (int h = 0; h < bmpdata.Width; h++)
    {
        p[0] = Convert.ToByte(255 - p[0]);
        p[1] = Convert.ToByte(255 - p[1]);
        p[2] = Convert.ToByte(255 - p[2]);

        p += 4;
    }
}

    Bir resmi gritonlarına çevirmek için kırmızı, yeşil, mavi renk değerlerinn ortamasını alıp üç rengede bu değeri atıyarız. Yine  bu yönteme göre daha bir yöntem var olup bu yöntem, her rengi belli bir oranda işleme katar.

for (int i = 0; i < bmpdata.Height; i++)
{
    for (int h = 0; h < bmpdata.Width; h++)
    {
        byte ort = Convert.ToByte((p[0] + p[1] + p[2]) / 3);
        p[0] = p[1] = p[2] = ort;
        p += 4;
    }
}

Daha başka bol kodlu günlerde görüşmek üzere...

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Görüntü İşleme (C#)

Mart 14, 2009 22:46 tarihinde dandelo tarafndan eklenmistir.

  Görüntü İşleme : Ölçülmüş veya kaydedilmiş olan elektronik (dijital) görüntü verilerini, elektronik ortamda (bilgisayar ve yazılımlar yardımı ile) amaca uygun şekilde değiştirmeye yönelik olarak yapılan bilgisayar çalışması. [wp]

 

 

      Bir görüntü gözek(pixel)lerden, gözeklerde kırmızı(R)-yeşil(G)-mavi(B) renk değerlerinden oluşur. Gözeklerin rengi RGB olarak üç ana rengin birleşimi şeklinde ifade edilir. R-G-B renk değerleri 0 ila 255 arasında değişir. 0 en koyu ton iken 255 e gittikçe açılır. Örneğin mavi rengin değeri :(0,0,255) kırmızın :(255,0,0) ve yeşilin de :(0,255,0) dir. Diğer renkler bu değerlerin değişmesi ile elde edilir. Artı olarak  32bitlik bir görüntünün gözekleri 4 kısından oluşur ve 4 kısımda görüntüye saydamlık derecesini veren 'Alpha' kanalıdır.

     Görüntünün bir satırda bulundurduğu gözeklerin sayısı o görüntünün genişliğini(width), satır sayısıda o resmin boyunu(height) verir.Boyutlarda (800x600), (1024x768) gibi iki değerli şeklinde yazılır. Bu değerlerden ilki görüntünün genişliğini, ikinci değer ise boyunu verir.

    C# ile görüntü işlemek için bir çok yöntem mevcut olmasına rağmen daha hızlı bir yöntem olduğu için pointer kullanacağım. Kullandığım yöntemin ana kalıbı aşağıdaki gibidir.

24bitlik format için ;

public Bitmap griton(Bitmap resim)
        {
            unsafe
            {
                BitmapData bmpdata = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height),
                        ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                byte* p = (byte*)bmpdata.Scan0;
                int atıl = bmpdata.Width*3 - bmpdata.Stride;

                for (int i = 0; i < bmpdata.Height; i++)
                {
                    for (int h = 0; h < bmpdata.Width; h++)
                    {
                        byte ort = Convert.ToByte((p[0] + p[1] + p[2]) / 3);
                        p[0] = p[1] = p[2] = ort;
                        p += 3;
                    }
                    p += atıl;
                }

                resim.UnlockBits(bmpdata);

                return resim;
            }
        }


32bitlik format için ;

public Bitmap griton(Bitmap resim)
        {
            unsafe
            {
                BitmapData bmpdata = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height),
                        ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

                byte* p = (byte*)bmpdata.Scan0;

                for (int i = 0; i < bmpdata.Height; i++)
                {
                    for (int h = 0; h < bmpdata.Width; h++)
                    {
                        byte ort = Convert.ToByte((p[0] + p[1] + p[2]) / 3);
                        p[0] = p[1] = p[2] = ort;
                        p += 4;
                    }
                }

                resim.UnlockBits(bmpdata);

                return resim;
            }
        }


      Dikkat ettiyseniz 24bitlik formatın aksine burada atıl oluşmamaktadır.

      Kodları unsafe bloğunun içinde yazabileceğimiz gibi metodu aşağıdaki gibi de tanımlayabiliriz.

public unsafe Bitmap griton(Bitmap resim)
        {
            BitmapData bmpdata ...
            ....
       }


      Yukarıdaki kodları satır satır açıklarsak;

      İlk olarak pointerlar olarak çalışacağımız için kodları "unsafe" bloğu içinde yazmalıyız veya metodu tanımlarken "unsafe" özlelliğini kullanmalıyız. Yalnız projemizde unsafe komutunu kullanabilmemiz için öncelikli olarak projenin ayarlarından unsafe kullanımına izin vermeliyiz. Bunun için, 'Project' menüsünden, '[Proje ismi] Properties', açılan pencerede 'Build' seçeneğine girip 'Allow unsafe code' seçeneğini aktif hale getiriyoruz. 

      Ayrıca çizim işlemlerini yapabilmemiz için projemize aşağıdaki isim uzaylarını eklemeliyiz.

using System.Drawing;
using System.Drawing.Imaging;

 

BitmapData bmpdata = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height),
           ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

       Resmin bitlerini ramde kitleyerek üzerinde işlem yapabilceğimiz hale getiriyor. Aldığı parametreler ;

"new Rectangle(0, 0, resim.Width, resim.Height) " , resmin üzerinde işlem yapılacak alanı belirtir. Yazıldığı şekilde, resmin (0,0) noktasında sonuna kadar tüm alanı kullanır.

"ImageLockMode.ReadWrite" , kilitli alan üzerinde işlem izni. ".ReadWrite" hem okumaya hem yazmaya, ".ReadOnly" adından da anlaşılacağı gibi sadece okurken, ".WriteOnly" sadece yazmaya izin verir.

"PixelFormat.Format24bppRgb" kilitli alanın kullanacağı formatı belirtir.Genel olarak ".Format32bppArgb" ve ".Format24bppRgb formatları kullanılmaktadır. 32 bit formatın 24 formata göre farkı, bir gözekin 3 (r-g-b) yerine 4 (r-g-b-a) parçası olması.

byte* p = (byte*)bmpdata.Scan0;


        

 
Ram üzerinde bir gözek ilerlemek.

         Bu komut ile kilitli bellek alanının ilk noktasına ulaşılmaktadır. Resim verilerinin ram üzerinde yerleşimini, resmin gözek yerleşiminin(2 boyutlu) tersine tek satır olarak yerleşmiş olduğunu düşünebiliriz. Yani bir gözekin 3 renk değeri(b-g-r) bitince diğer gözeğin ilk renk değeri (b) gelmektedir. Yukarıdaki resimde de temsili olarak gösterildiği şekilde, p=p[0] ilk renk değerini(mavi) verirken p[1] bir sonraki(yeşil) vermektedir. Eğer p yi bir artırırsak p[0] artık 2. renk değerini(yeşil) verirken p[1] 3. renk değerini(kırmızı) verir. Gözeklerin renk değerlerine ulaşmak için; eğer p değeri gözeğin başındaysa p[0] o gözeğin mavi(b), p[1] yeşil(g) ve p[3] de kırmızı(r) bileşenini vermektedir. Dikkat ettiysenin dizilimler standart r-g-b diziliminin tersine bellekte b-g-r (mavi-yeşil-kırmızı) şeklinde dizilmiştir. Eğer 32bit formatını seçtiyseniz, p[3] değeri bize o gözekin saydamlık derecesini verir. Tam görünür bir gözek için bu değer255 , hiç görünmemesi içinde bu değer 0'a ayarlanır. 32bitlik formatta bir sonraki gözeğe ulaşmak için p, 4 artırılır.

for (int i = 0; i < bmpdata.Height; i++)
{
    for (int h = 0; h < bmpdata.Width; h++)
    {
        byte ort = Convert.ToByte((p[0] + p[1] + p[2]) / 3);
        p[0] = p[1] = p[2] = ort;
        p += 4;
    }
}

        Görüntü üzerinde gözek gözek yapılacak (noktasal) işlemler için (parlaklık, gri ton, negatif gibi) tüm gözekleri dolaşacak şekilde içiçe iki döngü yapıyoruz. İçteki döngü bir satırın tüm gözeklerini dolaşırken, dıştaki döngü hangi satırda olduğumuzu belirliyor. Satır içinde dolaştığımız için bir gözekle işimiz bittiğinde bir sonraki gözeke geçmek için iç döngüde p'yi 3 artırıyoruz(32bit te 4). Bir satır bittiğinde de dıştaki döngünün sonunda p'ye atılı ekliyoruz(sadece 24bit için). Yukarıda ki kodda 32bitlik kullanılarak, bir resmi gri tonlarına çevirme uygulanmıştır. Bir gözekin tüm renk değerlerinin ortalaması alınıp, tüm renk değerlerine bu ortalama değeri atanmaktadır. Bir gözekle işimiz bittiğine bir sonraki gözeğe "p+=4;" kodu ile geçebiliyoruz. Artık p[0] değeri bize diğer gözeğin mavi renk değerini verecektir.

resim.UnlockBits(bmpdata);

 

Burada ise daha önce ram üzerinde kilitleyip üzerinde işlemler yaptığımız bellek alanını resme geri atıyoruz.

Burada anlatılanları uygulamak için ufak bir uygulama ve çeşitli Gİ örnekleri Kod Kütüphanesinde yayınlanacaktır....

 

Yanlış olduğunu, tam açıklanmamış olduğunu düşündüğünüz veya eklenmesini istediğiniz bir yer varsa lütfen yorumlarınızla mesajı zenginleştiriniz...

Not: Fazla kod işlerine girmeden hazır Gİ kodları kullanmak isterseniz, C# ile hazırlanmış AForge kütüphanesini deneyebilirsiniz.

 

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Augmented Reality (ArtırılmışGerçeklik)

Mart 11, 2009 22:08 tarihinde dandelo tarafndan eklenmistir.

   Pek de yeni olmayan ama pek de duyulmamış bir yazılım teknolojisini paylaşmak istedim. Türkçeye "Artırılmış Gerçeklik" olarak çevirebilceğimiz "Augmented Reality".

Kısaca bahsetmek gerekirse gerçek hayat ile bilgisayar grafiklerinin birleştirilip sunulduğu bir yapı diyebiliriz. Örneğin özel gözlüğünüzle bir reyona baktığınızda ürünler hakkında bilgilerinin gözünüzün önüne gelmesi, sadece siyah-beyaz referans resimlerin asılı olduğu bir salonda gezerek kendinizi piramitlerin içinde geziyormuş gibi hissetmek gibi desem pekte yalan olmaz.Bir örnek vermek istersek;

 

       Hakkında bir sürü kitaplar yazılan, üniversitelerde dersleri açılan, çeşitli firmalar tarafından frameworkleri çıkarılan sistem, gelecekte oyun sektörü, sinema sektörü, pazarlama ve reklam başta olmak üzere bir çok alanda kullanılacak gibi gözüküyor.Şehir planlama, oyun, müze, mobil sistemler, üretim ve mekan simulasyonu bunlardan sadece birkaçı...

 

      

 

       Flash ta dahil kullanabilceğiniz çeşitli kütüphaneler den biri de Artoolkit . Sitesinde sıfırdan başlayanlar için dökümanlardan, topluluklar ve çeşitli projelere kadar bir çok şey mevcuttur.

       İnsan-makine etkileşimini bir adım daha götüren teknoloji, bize gelecek hakkında bir fikir veriyor.

 

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

"Girişim Günleri 2008 İstanbul" İzlenimlerim

Aralık 3, 2008 20:28 tarihinde dandelo tarafndan eklenmistir.
    Aylar öncesinden duyurusunu yaptığımız ve heyecanla beklediğimiz Girişim Günleri müthiş bir kadro ile Kadir Has Üniversitesinde gerçekleştirildi. Hafta sonunu yoğun iş ve okul hayatından kurtulup dinlenmek varken Girişim Günlerine katılanlar herhalde hiç de pişman değildirler. Yaklaşık 30-40 kişi ile iki gün boyunca beyin fırtınaları yapılıp yoğun ve eğlenceli bir biçimde bir proje üzerinde çalıştık.

    29 Kasım cumartesi sabahı saat 8 diye bildiğim ama 10 olduğunu saatlerce bekleyerek öğrendiğim etkinlik, Kadir Has Ekonomi kulübünün yardımlarıyla ayarlanan salonda Şaban Daşgın ve Ferit Demir tarafından başlatıldı. İlk olarak Girişim Günlerinin ne olduğundan ve amaçlarından bahsedildi.

"Amerika Birleşik Devletleri´nde 2007 yılında başlatılan ve internet tutkunlarının geliştirdikleri dünyanın ilk ticari fikir platformu olarak tanınan, bu güne kadar sadece ABD, Almanya ve İsrail´de organize edilen startupweekend isimli etkinlik, 29-30 Kasım 2008 tarihleri arasında İstanbul´da „GİRİŞİM GÜNLERİ İstanbul 2008” adıyla organize edildi. "

Daha sonra fikir sunacaklar 3-4 dk. ile fikirleri sunup diğerlerini fikirleri için ikna etmeye çalıştılar. Çok güzel fikirler sunulmuştu ancak son anda Erhan Erdoğan'ın ani fikri "Sosyal Trafik Ağı" oy çoğunluğu ile seçildi.

Etkinlik Dükkanı (Tuğba Tırın),
Kısa Süreli İş İlanı Servisi (Batuhan Gümüşlü),
Kulüpler Birliği (Alya Esat),
Talentcamp (Gökçen Karan),
Lokum (Sinan Ata),
Trafik Network (Erhan Erdoğan),
Bir Sorun Var (Erdal Tutar),
Reklam Kooperatifi (Atıl Erdoğan)

     

    Fikir belirlenir belirlenmez gruplar oluşturularak çalışmalara başlandı. Projenin ana hatları belirlendikten sonra Uğur Çelenk arkadaşımızın önderliğinde biz yazılım grubu, projenin ana hatlarını tasarlamaya başladık. Eş zamanlı olarak Proje Yönetimi, Pazarlama, Kurumsal kimlik gibi alanlarda da çalışmalar devam ediyordu. Hedef kitle belirleniyor, gelir modeli çiziliyor ve projenin detayları belirleniyordu. Her yeni özellik ile bize eklenecek yeni bir modül yapmak düşüyordu. İlk gün itibari ile bayâ yol alınmış olarak ayrılıyoruz ancak diğerlerini aksine yazılımcılar her zaman olduğu gibi işlerine evdede devam ediyor. :)

    Ertesi gün domain ismi belirlenmiş, tasarım hazırlanmış, kurumsal kimlik yavaş yavaş belirlenmiş bir şekilde çalışmalar devam ediyor. Önceki günkü canlı hava aynen devam etmekte. Hatta gün sonuna doğru basının ve çeşitli şirketlerin ceolarını gelecek haberi daha da bi heyecan katıyor.Normal bir proje gelişimin hızlandırılmış halini çok güzle bir şekilde gözlemleyebiliyordunuz.

    Gün sonuna doğru yaklaşırken bizde bir heyecan (acaba bitecekmi diye), yetmezmiş gibi bir de organizatörlerin sıkıştırması ile her bölümün çalışmalarının bir özeti şeklinde sunumlar toplandı, demolar hazırlandı. Daha sonra organizatörler Ferit Demir ve Şaban Daşgın çalışmaların bittiğini duyurup iki gün hakkında ufak bir toparlama yaptıktan sonra her gruptan bir temsilci kendi grubunun yaptığı çalışmaları anlattı. Son olarakta projenin çalışan demosu Uğur Çelenk tarafından gösterilirken her bir adımda alkış sesleri yükseldi. Hatta o kadar ki yanda yapılan canlı yayın çekimini rahatsız ettiğimiz için uyarı geldi :).

    Her  şey çok güzel gitmişti. Son olarak ta şirketn kurulup kurulmayacağını ve kurulursa yönetim kurulunun kimlerden oluşturulacağını belirlemek kalmıştı. Oylama sonunda kurulma kararı için sadece bir hayır oyu çıkmıştı. Şirketin kurulma kararı çıktıktan sonra biri organiztörlerden olmak üzere 5 kişilik yönetim kurulunu seçme işlemine geçildi. 5 kişilik aday listesinden oylama ile 4 kişi seçilmiş ve yönetim kurulmuş bir şekilde "bağlanıtıyı koparmayalım " mesajları ile etkinlik bitirildi. Herkes mutlu ve Türkiye'de bir ilki gerçekleştirmenin gururuylar dağıldı. Ve bende evime gidip sadece etkinlik için geldiğim İstanbul'dan tekrar Trabzona dönmek üzere hazırlıklarımı yapmaya başladım.

    Daha sonraki günlerde aşağıda yazacağım sitelerden projenin detaylarını öğrenebilirsizin. Dediğim gibi katılmayan binpişman... İzmir ve Ankara'da da yapılması planlanıyor. İmkanı olan katılsın derim.

Nice GİRİŞİM dolu GÜNLERe.

Girişim Günleri (Anasayfa)

Abvizyonu (Basın)

İzlenimler :

www.maxihaber.net

www.expodea.com

www.erdemnerede.blogspot.com

www.sinanata.com

www.ghost.whoyle.com

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5