Monday, October 28, 2002

Görüntü işlemek (Image Processing)

CmuCam4J projesi dahilinde, sentetik gorus projesi basladi. Projenin amacı, JStamp Java devresinde yani J2ME ortaminda calışabilen görüntüyü işlem kodları yaratmaktır. CmuCam adli elektronik göze bağlantı yapan bu kodlar veri içinden görsel bilgi çıkarabilen kütüphane yaratmak amacı ile kuruldu.

Bu yazımızda görüntü işlem kavramlarından ve terimlerinden bahsedeceğiz.

Sentetik görüş, görüntü işlem farkları

Sentetik görüş, insanın göz ile rahatça yaptığı, nesneleri birbirinden ayırt etme, uzaklıklarını tesbit edebilmek gibi günlük hayatta ihtiyacımız olan görüntü 'uygulamalarının' toplamıdır. Robotlar için çok kullanılan bu kavramın en temel ilgilendiği konu 2 boyutlu resimden nesne çıkartabilmek. Sayısal fotoğraf bildiğimiz gibi 2 boyutlu bir konaç üzerinde X ve Y eksenleri üzerinde düşünebileceğimiz, 0 ile 255 arası değişen değerler toplamı ise, böyle dağınık bir bilgi ortamından, her imgecik (pixel) arasında alakalar arıyarak, bir sonuca varmak oldukça zordur.

'Gorüntü işlem' yöntemi ise, sentetik görüş kodlarının kullanacağı en alt seviyedeki algoritmalar toplamıdır. Mesela bir resme daha fazla ışık eklemek, yâni aydınlatma seviyesini yükseltmek bir görüntü işlemidir. Ya da, eşik değeri kullanarak, belli bir değerden yüksek olan nokta değerlerini elekten geçirmek, gene görüntü işlem sahasına girer. Yani, görüntü islemi, görüntü hakkında günlük hayatta lazım olabilecek mantıki sonuçlar çıkarmaya uğraşmaz. Sadece veri işler. Veriyi 'bilgiye' dönüştürmez.

Renkler

Renklerin temsil edilişi, kullanılan donanıma göre değişebilir. CmuCam gözü, seri port üzerinden (RS-232) imgecikleri iletirken, her nokta için 3 değer gönderiyor. RGB değerleri dediğimiz bu değerler Kırmızı (Red), Yeşil (Green) ve Mavi (Blue) kelimelerine tekâbül eder. Tabiattaki her rengin bu üç rengin değişik seviyelerdeki karışımı olarak temsil edilebilmesinden yola çıkarak kurulmuştur.

CmuCam4J altında, renkli bir resmi ColorImage nesnesi ile temsil ediyoruz. Bu nesne altında 3 tane GrayImage nesnesi var. Bu üç GrayImage nesnesi, evet bildiniz, kırmızı yeşil ve mavi renk değerlerini gösterir.

İlginç bir gözlem yapalım: GrayImage nesnesi aynı zamanda tek başına kullanilabilecek bir nesnedir. Gri seviyeli resimler bu nesne ile temsil edilip işlenebilir. Gri tonlu resimler sadece tek bir X-Y konacı altında 0..255 değerleri arasındaki nokta değerleri taşır.

Yazılım mühendisliği açısından, aynı nesneyi alıp ColorImage altına koyduğumuzda, temsilen demiş oluyoruz ki, GrayImage'in görevi biraz değişti (algoritması değişmese bile). Artık gri değerler yerine meselâ kırmızı değerler taşıyacak. Aslında GrayImage yerine daha genel bir isim kullanmak belki de yararlı olabilirdi.


No comments: