Görüntü işleme, elektronik ortamda bulunan resimleri istenen şekilde düzenleme işlemleridir. Örneğin bir resmin boyutu değiştirilebilir, renkleri değiştirilebilir, döndürülebilir vb. işlemler uygulanabilir.

Bir resmin boyutunu değiştirebiliriz dedik. İlk aşamada resmin boyutunu büyütmek istediğimizi düşünelim. Resmimizin genişlik ve yüksekliğini 2 katına çıkarmak istiyoruz. Oluşturacağımız yeni resimde eski resim kadar pikselin bulunması gerekiyor. Peki bu pikselleri nasıl tahmin edeceğiz? Veya %50 oranında küçültmek istediğimizde resmin piksellerinin yarısı olmayacaktır. Peki hangi pikselleri sileceğiz ya da nasıl bir yöntem uygulayacağız?

Renkli bir resmi siyah beyaza dönüştürmek isteyebiliriz. Bu işlem için nasıl bir yöntem izlemeliyiz ki bütün renkler siyah ve beyaz arasındaki gri tonlamalı hale dönüşsün?

Siyah beyaz bir resmi renkli bir resme dönüştürmek isteyebiliriz. Hangi tonun hangi renge karşılık geldiğini nasıl tahmin edeceğiz?

Dijital ortamda resimlerle yapılacak olan bu ve bunun gibi birçok işlemi gerçekleştirebilmek için GÖRÜNTÜ İŞLEME TEKNİKLERİni iyi anlayabilmemiz gerekmektedir. Görüntü işleme tekniklerini anlayabilmek için de öncelikle renk kavramına göz atmalıyız. Renk kavramı için en temel renk uzayı olan RGB Renk Uzayını inceleyelim.

RGB RENK UZAYI

RGB, Red (Kırmızı), Green (Yeşil), Blue (Mavi) renklerinin baş harflerinin birleşmesiyle oluşturulmuştur.

Elektronik ortamdaki renkler bu üç rengin karıştırılması ile oluşmaktadır. Bütün renkler saf olarak (%100 = pure) karıştırıldığında beyaz, %0 oranında karıştırıldığında ise siyah renk elde edilmektedir.

csharp-goruntu-isleme-1-1

csharp-goruntu-isleme-1-1

RGB Renk Uzayı

Ayrıca bu üç rengin birleşmesiyle ara renkler oluşmaktadır: Cyan, Sarı, Magenta.
CYAN = MAVİ + YEŞİL
SARI = YEŞİL + KIRMIZI
MAGENTA = MAVİ + KIRMIZI

Piksel :Götüntülerin en temel parçasına piksel denir. Örneğin bir ekranın çözünürlüğü için 1024 x 768 piksel diyoruz. Açıklaması şudur: Ekranda 1024 x 768 adet piksel bulunmaktadır.

———————————————————————–

C# dilini kullanarak görüntü işleme işlemleri yapmak istiyoruz. Öncelikle bir resmin piksellerine ulaşıp o pikselin renk bilgilerini elde edelim.

Örneğimizde resim dosyasını pictureBox’tan alalım:

Bitmap resim = new Bitmap(pictureBox1.Image);

Bir görüntünün piksel bilgilerine erişebilmek için Bitmap sınıfını kullanacağız. Bu sınıf türünden oluşturacağımız yavru değişken sayesinde istediğimiz görüntünün bütün piksel bilgilerini elde edebilir, ona yeni bir değer atayabiliriz.

Görüntümüzün [0,0]. pikselinin kırmızı, yeşil 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(satır, sütun) fonksiyonu ile resmin 0. satırının 0. sütununda bulunan pikselinin renk değerini Color türünden bir değişkene aktarıyoruz. renk değişkenimizin R değeri kırmızı, G değeri yeşil, B değeri ise mavi rengini söylemektedir.

Bir resmi renkliden siyah beyaza dönüştürmek için en basit yol, resmin bir pikselinin R, G ve B değerlerini toplayıp 3’e bölmek ve yeni resmin R, G ve B değerlerine bulduğumuz sonucu atamaktır.

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

Sonucumu yeni bir resimde görebilmek için Bitmap türünde yeni bir resim değişkeni oluşturuyoruz. Bu resmin genişlik ve yükseklik değerleri eski resim ile aynı olacaktır.

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

Pikselimizin yeni renk değerini Color türünden oluşturalım.

Color yeniRengim = Color.FromArgb(yeniRenk, yeniRenk, yeniRenk);
Color.FromArgb(kırmızı, yeşil, mavi) fonksiyonu, Color türünde kırmızı, yeşil ve mavi değerlerine sahip bir değer oluşturur.
Son olarak yeni resmin [0,0]. pikseline yeniRengim değişkenini atayalım.
yeniresim.SetPixel(0, 0, yeniRengim);
Yalnız bu işlemleri bütün pikseller için yapacağımızdan, resmi iki boyutlu dizi gibi kullanarak bu dizinin her elemanı için bu işlemi tekrarlamak zorundayız.
Uygulamanın fonksiyonu aşağıdadır:
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 çalıştırmak için bir örnek aşağıdadır:

pictureBox2.Image = Donustur(new Bitmap(pictureBox1.Image));
csharp-goruntu-isleme-1-2

csharp-goruntu-isleme-1-2