Veysel Uğur KIZMAZ

C# Görüntü Isleme - 1

16.06.2012Okunma Sayısı: 19242Kategori: C#.Net

Görüntü isleme, elektronik ortamda bulunan resimleri istenen sekilde düzenleme islemleridir. Örnegin bir resmin boyutu degistirilebilir, renkleri degistirilebilir, döndürülebilir vb. islemler uygulanabilir.

Bir resmin boyutunu degistirebiliriz dedik. Ilk asamada resmin boyutunu büyütmek istedigimizi düsünelim. Resmimizin genislik ve yüksekligini 2 katina çikarmak istiyoruz. Olusturacagimiz yeni resimde eski resim kadar pikselin bulunmasi gerekiyor. Peki bu pikselleri nasil tahmin edecegiz? Veya %50 oraninda küçültmek istedigimizde resmin piksellerinin yarisi olmayacaktir. Peki hangi pikselleri silecegiz ya da nasil bir yöntem uygulayacagiz?

Renkli bir resmi siyah beyaza dönüstürmek isteyebiliriz. Bu islem için nasil bir yöntem izlemeliyiz ki bütün renkler siyah ve beyaz arasindaki gri tonlamali hale dönüssün?

Siyah beyaz bir resmi renkli bir resme dönüstürmek isteyebiliriz. Hangi tonun hangi renge karsilik geldigini nasil tahmin edecegiz?

Dijital ortamda resimlerle yapilacak olan bu ve bunun gibi birçok islemi gerçeklestirebilmek için GÖRÜNTÜ ISLEME TEKNIKLERIni iyi anlayabilmemiz gerekmektedir. Görüntü isleme tekniklerini anlayabilmek için de öncelikle renk kavramina göz atmaliyiz. Renk kavrami için en temel renk uzayi olan RGB Renk Uzayini inceleyelim.

RGB RENK UZAYI

RGB, Red (Kirmizi), Green (Yesil), Blue (Mavi) renklerinin bas harflerinin birlesmesiyle olusturulmustur.

Elektronik ortamdaki renkler bu üç rengin karistirilmasi ile olusmaktadir. Bütün renkler saf olarak (%100 = pure) karistirildiginda beyaz, %0 oraninda karistirildiginda ise siyah renk elde edilmektedir.

Ayrica bu üç rengin birlesmesiyle ara renkler olusmaktadir: Cyan, Sari, Magenta.
     CYAN = MAVI + YESIL
     SARI = YESIL + KIRMIZI
     MAGENTA = MAVI + KIRMIZI

Piksel :Götüntülerin en temel parçasina piksel denir. Örnegin bir ekranin çözünürlügü için 1024 x 768 piksel diyoruz. Açiklamasi sudur: Ekranda 1024 x 768 adet piksel bulunmaktadir.

-----------------------------------------------------------------------

C# dilini kullanarak görüntü isleme islemleri yapmak istiyoruz. Öncelikle bir resmin piksellerine ulasip o pikselin renk bilgilerini elde edelim.

Örnegimizde resim dosyasini pictureBox'tan alalim:

Bitmap resim = new Bitmap(pictureBox1.Image);

Bir görüntünün piksel bilgilerine erisebilmek için Bitmap sinifini kullanacagiz. Bu sinif türünden olusturacagimiz yavru degisken sayesinde istedigimiz görüntünün bütün piksel bilgilerini elde edebilir, ona yeni bir deger atayabiliriz.

Görüntümüzün [0,0]. pikselinin kirmizi, yesil ve mavi renklerini elde edelim:

Color renk = resim.GetPixel(0, 0);
int kirmizi = renk.R;
int yesil = renk.G;
int mavi = renk.B;
 
resim.GetPixel(satir, sütun) fonksiyonu ile resmin 0. satirinin 0. sütununda bulunan pikselinin renk degerini Color türünden bir degiskene aktariyoruz. renk degiskenimizin R degeri kirmizi, G degeri yesil, B degeri ise mavi rengini söylemektedir.

Bir resmi renkliden siyah beyaza dönüstürmek için en basit yol, resmin bir pikselinin R, G ve B degerlerini toplayip 3'e bölmek ve yeni resmin R, G ve B degerlerine buldugumuz sonucu atamaktir.

int yeniRenk = (kirmizi + yesil + mavi) / 3;

Sonucumu yeni bir resimde görebilmek için Bitmap türünde yeni bir resim degiskeni olusturuyoruz. Bu resmin genislik ve yükseklik degerleri eski resim ile ayni olacaktir.

Bitmap yeniresim = new Bitmap(resim.Width, resim.Height);

Pikselimizin yeni renk degerini Color türünden olusturalim.

Color yeniRengim = Color.FromArgb(yeniRenk, yeniRenk, yeniRenk);
 
Color.FromArgb(kirmizi, yesil, mavi) fonksiyonu, Color türünde kirmizi, yesil ve mavi degerlerine sahip bir deger olusturur.
 
Son olarak yeni resmin [0,0]. pikseline yeniRengim degiskenini atayalim.
 
yeniresim.SetPixel(0, 0, yeniRengim);
 
Yalniz bu islemleri bütün pikseller için yapacagimizdan, resmi iki boyutlu dizi gibi kullanarak bu dizinin her elemani için bu islemi tekrarlamak zorundayiz.
Uygulamanin fonksiyonu asagidadir:
 
Bitmap Donustur(Bitmap resim)
{
     Bitmap yeniResim = new Bitmap(resim.Width, resim.Height);
     for (int i = 0; i < resim.Width; i++)
     {
          for (int j = 0; j < resim.Height; j++)
          {
               Color renk = resim.GetPixel(i, j);
               int yeniRenk = (renk.R + renk.G + renk.B) / 3;
               yeniResim.SetPixel(i, j, Color.FromArgb(yeniRenk, yeniRenk, yeniRenk));
          }
     }
     return yeniResim;
}

Fonksiyonu çalistirmak için bir örnek asagidadir:

pictureBox2.Image = Donustur(new Bitmap(pictureBox1.Image));
 
 
 

 Veysel Ugur KIZMAZ