Piksel Kavramı ve Bmp Formatı

Piksel : Picture Element birleşik kelimesinden türetilmiş ve sayısal görüntülerin en küçük noktasını tanımlayan bir kelimedir.
Resim : Organize birleştirilmiş pixel topluluğuna resim denir.
Format : Piksellerin resim oluşturabilmesi için organize etme algoritmasına format denir.
Bit ve Byte(Bayt) : Format üzerinde pixelin sayısal karşılığını yazmak gereklidir. Bunun için bizim kullanacağımız yöntemde(BMP) her bir pixel 0-255 arası tonlanmış 3 ana rengin karışımı şeklinde tutulur. Bilgisayar ikili çalışma yaptığından 0-255 sayı aralığı sekiz adet bir ler ve sıfırların gruplanması ile elde edilir.

Burada her bir 1 veya 0 a bit 0-255 arası bilgileri tutan sekizli gruba da Byte denir.

RGB : Red Green Blue  3 ana rengin kısaltmasıdır.Sayısal olarak tüm renkler bu 3 ana rengin karışımı ile elde edilebilir.

Bmp : Bmp resimlerin sayısal olarak saklamak için geliştirilmiş bir algoritmadır.RGB tonlu bir BMP resmi her bir renk için bir grup(Byte) olacağını düşünürsek en az 24Bit derinliğinde olmalıdır.Kırmızı 1 pixel(noktalık) bir 24Bit Bmp resminin bilgisayarda saklanma şekli aşağıdaki gibidir;


Burada görüldüğü üzere 42(Hex)=B  4D(Hex)=M karakterlerine karşılık gelmektedir.Bu bize açılan resmin BMP formatında olup olmadığını söyler.Buradan sonra 3A 00 00 00 resmin dosya boyutunu gözterir.Yani bu dosya (3A)=58 bayt.00 00 00 00 kullanılmayan bir bölümdür.36 00 00 00 resimde renk değerlerini tutan pixelin başlangıç adresini gösterir.Bu değer genelde ve bu resim içinde (36)Hex=54 adresidir. (28 00 00 00)Hex=40 şu andan itibaren ilk piksele kadar ki byte sayısı.01 00 00 00 =1 resmin genişliği (pixel olarak). 01 00 00 00 =1 resmin yüksekliği (pixel olarak).Bu adımdan sonra direk 54.bayta(Renklerin bulunduğu adres) geçebiliriz.Bu adreste karşımıza çıkan değer 00 00 FF RGB değeridir.

     İşte böyle bilgisayar herşeyi bit bit kaydeder ve işler.Bizde resim işleme için 54.bayttan itibaren her pixel için 3 bayt tarayarak resmin RGB değerlerini matrislere kaydedeceğiz böylece renkler üzerinde çarpma,toplama,mantıksal karşılaştırma işlemlerini hızlı bir şekilde gerçekleştireceğiz.

18 yorum:

  1. Gerçekten çok faydalı veriler var..özellikle bu işe kafa yoranlar için..teşekkürler

    YanıtlaSil
  2. Sadece Teşekkür edebilirim keşke bende insanlara böyle yardım edebilsem

    YanıtlaSil
    Yanıtlar
    1. Çok teşekkür ederim. İşlerimin yoğunluğu nedeniyle vakit ayırmayı unuttuğum şu günlerde, böyle yorum yazmanız bile bir katkı, faydadır.

      Sil
  3. Hocam çok iyi bir konuyu paylaşmışsınız. ellerinize sağlık bu calışma ve diğerleri benim ve ihtiyacı olanlar için cok faydalı olucaktır.

    YanıtlaSil
  4. Faydalı ve güzel bir blog olmuş hocam, teşekkürler.

    YanıtlaSil
  5. (28 00 00 00)Hex=24 burada bir hata yok mu hocam? 28H 40 değil midir?

    YanıtlaSil
    Yanıtlar
    1. Evet doğrudur, bir yanlışklık olmuş. Dikkatiniz için teşekkür ederim.

      Sil
    2. Rica ederim. İyi çalışmalar.

      Sil
  6. Hocam yukarıda ekran görüntüsünü paylaştığınız hex viewer programının ismini rica edebilir miyim?

    YanıtlaSil
  7. Yanlış hatırlamıyorsam frhed hex editor isimli programdı.

    YanıtlaSil
  8. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  9. Tekrardan merhabalar hocam. 512 x 512 lik bir 24-bit bmp dosyasının genişlik değeri (hex) 0002 0000 . Burada nasıl bir matematiksel işlem yapılıyor da 512 bulunuyor? Aydınlatırsanız sevinirim. İyi günler dilerim.

    YanıtlaSil
    Yanıtlar
    1. Merhabalar,

      Problem başka kişiler için de anlaması zor olacağından biraz detaylı bir cevap yazacağım.


      Öncelikle 32 bit int değerinin yapısını inceleyelim. 32 bit int değeri bilgisayarda 4 tane 8 bitlik ( 1 byte ) değer ile saklanır. Aşağıdaki örnek 16 lık sayı tabanında bu saklama işlemini göstermektedir. Tabanımız 16 olduğundan basamaklar 1,16,256,... şeklinde gitmektedir.

      i = 5 ---> 00 00 00 05 <-- (5)*1
      i = 11 ---> 00 00 00 0b <-- (11)*1
      i = 150 --> 00 00 00 96 <-- (9)*16 + (6)*1
      i = 250 --> 00 00 00 fa <-- (15)*16 + (10)*1
      i = 512 --> 00 00 02 00 <-- (2)*256

      Yukarıdaki kısmı sizin zaten anladığınızı düşünüyorum. Şimdi bu 8 bitlik grupları 1 2 3 4 olarak isimlendirelim. Bilgisayar bu veriyi sistem yapısına bağlı olarak Little Endian yada Big Endian olmak üzere iki farklı şekilde saklayabilir. LE şeklinde en düşük ağırlıklı byte ilk sırada yer alırken, BE şeklinde en yüksek ağırlıklı byte ilk sırada yer almaktadır.

      Yani i = 512 verisi LE sistemlerde 4321 sırasında : 00 02 00 00 şeklinde saklanırken, BE sistemlerde 1234 sırasında 00 00 02 00 şeklinde saklanacaktır.

      Sil
    2. Ellerinize sağlık hocam.

      Sil
  10. Gerçekten çok iyi anlatmışsınız..Teşekkürler

    YanıtlaSil
  11. Kırmızı 1 pixel(noktalık) bir 24Bit Bmp resminin bilgisayarda saklanma şekli RGB' ye (Red,Green,Blue) göre 00 00 FF şeklinde değilde FF 00 00 şeklinde olması gerekmiyormu.

    YanıtlaSil
    Yanıtlar
    1. Merhaba, görüntü formatı RGB olsa dahi BMP formatı bellekte BGR şeklinde saklıyor. Bu nedenle 00 00 FF şeklinde yazılıyor.

      Sil

Görüntü işleme ile ilgili yeni yazıları ve bu sitede yer alan yazıların güncellenmiş sürümlerini www.imlab.io veya cescript.github.io adreslerinden takip edebilirsiniz.

X