tr
tr

Görüntü Oluşumu (Image Formation)

Gözümüzü açtığımız zaman çevremizde bir çok nesne görmekteyiz. Bu nesnelerin, göz tarafından görülme aşamalarının nasıl dijital ortama aktarıldığı ve görüntünün oluşum süreci hakkından bahsedeceğiz. Bir görüntü ile neler yapılabileceği hakkında bilgiler vermeye çalışacağız.

Bir görüntünün oluşması için belirli süreçler vardır. Bu süreçlerden bir tanesi, temel olarak görüntüyü oluşturma geometrisidir. Görüntü oluşturma geometrisi, görüntü düzlemindeki sahnede bir noktanın iz düşümünü (Bir ışık kaynağından çıkan ışınların bir sahne üzerinde oluşturduğu görüntü) nereye yerleştirileceğini belirleyerek oluşmaktadır. Bir diğer oluşturma süreci ise ışık fiziği (physics of light) ile oluşmaktadır. Işık fiziği, görüntü düzleminde bulunan herhangi bir nokta üzerine düşürülerek bu noktanın parlaklık durumu belirlenmektedir.  Bu iki olaylar sayesinde görüntümüz oluşur ve dijital ortamlara aktarılmaktadır.

İlk olarak biraz dijital görüntüyü oluşturan renk mevzusunda bahsetmek gerekirse;

Renkli Görüntü

Görmüş olduğumuz renkli dijital görüntüler bir takım piksellerden ve bu pikselleri temsil eden bir takım kodların birleşmesi ile meydana gelmektedir. Oluşan bu renkleri tanımlamak için kullanılan matematiksel modellere ve  bütün renkleri temsil edecek şekilde oluşturulmasına genel olarak renk modeli denilmektedir. Şekilde de görüldüğü gibi renkli görüntüler (tipik olarak)  üç boyutlu ‘kırmızı’, ‘yeşil’ ve ‘mavi’ kanal için μ = R, G, B olmak üzere üç ana spektral duyarlılık kullanılarak oluşturulur. 

Çeşitli uygulamalar ve ihtiyaçlar için kullanılan renk modelleri mevcuttur tabi ki bunlarında kendi içlerinde avantajları ve dezantajları bulunmaktadır.  Diğer bir yandan bir insanın algılayabileceği belli spektral aralığı bulunmaktadır. Bu aralık retinadaki normalleştirilmiş spektral duyarlığı grafikte görülmektedir.

Gri Tonlamalı 

Dijital görüntü dizisinde grinin çeşitli tonları yer almaktadır. Her bir pixelin parlaklık değeri olduğundan dolayı bu değerler 0 ile 250 arasında değişmektedir. Burada 0 siyah 255 ise beyazdır aradaki değerler ise tonajı belirtmektedir. Gri tonlamalı görüntüler renkleri görmezden gelmesine rağmen, ışığın yoğunluğunu belli etmektedir. Bir görüntüdeki bit sayısı ne kadar artarsa gölge sayısıda ona bağlı olarak artmaktadır.

Genel görüntü dosyası formatları

GIF (Graphic Interchange Format) – Grafik Değişim Biçimi

PNG (Portable Network Graphics) – Taşınabilir Ağ Grafikleri

JPEG (Joint Photographic Experts Group) – Birleşik Fotoğraf Uzmanları Grubu

TIFF (Tagged Image File Format) – Etiketli Resim Dosyası Biçimi

PGM (Portable Gray Map) – Taşınabilir Gri Harita

FITS (Flexible Image Transport System) – Esnek Görüntü Taşıma Sistemi

Geometrik Dönüşümler (Geometrical Transformations)

Resim üzerinde bulunan her bir pikselin bir yerden başka bir yere haritalanması işlemi olarak düşünebiliriz. Burada 2D ve 3D temel öğeleri ve 3D özelliklerin 2D özelliklere nasıl yansıtıldığına değineceğiz. Daha sonra geometrik dönüşüm için başlıca işlemler olan; taşıma (translate), aynalama/yansıma (mirror/reflect), eğme – kaydırma (shearing), ölçekleme (scaling) ve döndürme(rotation) işlemlerinden bahsedip bir kaç örnek vermeye çalışacağız.

Representing 2D – 3D Points

Şimdi ise sürekli bilgisayarlı görüde kullanılan 2D ve 3D konularına değineceğiz. Bunları tanımlayıp biraz bahsetmek gerekirse; 2D iki-boyutlu, 3D üç-boyutlu (bir görüntüdeki piksel koordinatları) anlamına gelmektedir. 2D objeleri sadece 2 boyutta gösterilip sadece yüksekliğine ve genişliğine göre ifade edilirken, 3D objeleri 3 boyutta gösterililip yüksekliğine,genişliğine ve derinliğine göre ifade edilir.

2D matematiksel olarak x ve y ile ifade edilmektedir. Bu da x = (x, y) ∈ R 2 veya şu şekilde gösterilir:

3D matematiksel olarak x, y ve z ile ifade edebiliriz. Bu da x = (x, y, z) ∈ R 3 veya şu şekilde gösterilir:
 

(sütun vektörleri (x 1 , x 2 , . . .) olarak gösteriyoruz.)

Akılda canlanabilmesi için aşağıdaki şekilde çizilen bir çember, kare ve dikdörtgen 2D, silindir, küp ve prizma 3D dir. Burada yapılan değişiklik sadece bir buyutun daha eklenmesidir. Aynı bu şekilde görüntüler üzerinde çalışıren 2D ve 3D ile işlemler gerçekleştirmekteyiz. Daha ilerleyen seride görüntü üzerinde yapılacak olan işlemlerle tam olarak neyden bahsettimizi  anlayacaksınız.

 

Kameranın Geometrik Modeli (Geometric Model of Camera)

Basit bir nesnenin görüntüsü oluşabilmesi için  bu nesneye ilk olarak bir ışık ışınları düşmesi ve bunların yansıması gerekmektedir. Şekildeki resimde görüldüğü üzere sahne tek bir kaynaktan gelen ışık ile aydınlatılmaktadır. Sahnededen çıkan ışınlar kameraya doğru yansıyacak ve kamera sayesinde algılanacaktır. Matematiksel gösterim olarak ifade edilimi ise şöyledir

Basit model: f (x, y) = i (x, y) r (x, y)

i: aydınlatma, r: yansıtma

“Pinhole” kamera modeli

2D bir yüzeyde 3D sahnenin görüntüsünü oluşturmak için iğne deliği olarak adlandırılan en kolay yöntem “pinhole” kameradır. Işık ışınları bir “pinhole” den geçerek görüntü düzlemi üzerinde nesnenin ters çevrilmiş bir görüntüsünü oluşturur.

Perspektif projeksiyonu:

f: odak uzaklığı, iğne deliği ile görüntü düzlemi arasındaki mesafe

f: odak uzaklığı, iğne deliği ile görüntü düzlemi arasındaki mesafe

Kamera Optiği

Gerçek anlamda açıklık ne kadar büyük olursa daha fazla ışık kabul edilir. Bu sayede devreye lensler girmektedir. Sahneden gelen ışın demetlerini görüntü düzlemindeki karşılık gelen noktaya odaklamak için lenslerin belirli açıklığa yerleştirilmesi gerekmektedir.

Görüntüler üzerinde bir çok işlemler yapılmaktadır. Bunlardan biride geometrik dönüşüm işlemidir. Var olan görüntüler üzerinde çeşitli işlemler yapılarak bunları daha kullanışlı hale getirebiliriz. Bu görüntüler üzerinde  yaklaştırma, boyutlandırma ve yönelim gibi işlemler gerçekleştirilebilir. İhtiyaç dahilinde görüntüler üzerinde işlemler yapılmaktadır. Bunlardan birleştirme işlemine bir örnek olarak, uydudan çekilmiş bir çok görüntünün birleştirilip tek bir görüntü olarak harita şekline getirme işlemini söyleyebiliriz. Yazımızın başında belirttiğimiz geometrik dönüşüm için başlıca işlemlerden biraz bahsedelim:

Taşıma (Translate)

Bir resimdeki giriş değerindeki her pixel ile çıkıştaki yeni konumlara belirli bir öteleme mesafesi ile taşıma işlemini gerçekleştirmektedir. Eğer bir görüntü üzerinde iyileştirmeler yapmak istersek taşıma işleminden faydalanılabilir.

Aynalama, Yansıtma (Mirror/Reflect)

Aynalama işlemi ile elimizde bulunan görüntüyü istenilen konumdan alarak aynalanmak istenenen eksen veya nokta etrafında orjjinal görüntüsüne benzer bir şekilde simetrisini almamıza yani diğer bir tabirle takla attırma işelmi yapıp yeni konuma yerleştirmeye yaramaktadır. Durumua göre bir görüntü üzerinde çoklu yansıma işlemi yapılabilmektedir.

Aynalama Kod Örneği

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
 int array[3][3]; // orjinal dizi
 int arrayimg[3][3]; // resim dizisi

 for(int i=0;i<3;i++){ // enter original array data
 for(int j=0;j<3;j++)
 array[i][j] = rand()%100;
 }

 for(int i=0;i<3;i++){ //dizinin görüntü verilerini hazırlar
 for(int j=0;j<3;j++){
 arrayimg[i][j]=array[2-i][j]; // dizi görüntüsü için
 }
 }

 cout<<"Orijinal dizi öğeleri"<<endl;
 for(int i=0;i<3;i++){
 for(int j=0;j<3;j++)
 cout<<array[i][j]<<"\t"; //orjinal dizi
 cout<<endl;
 }

 cout<<"Dizinin üst ve alt konumunda ayna için dizi görüntüsü"<<endl;
 for(int i=0;i<3;i++){
 for(int j=0;j<3;j++)
 cout<<arrayimg[i][j]<<"\t"; // goruntu ogeleri
 cout<<endl;
 }
 return 0;
}

Çıktı:

Orijinal dizi öğeleri
83 86 77
15 93 35
86 92 49

Dizinin üst ve alt konumunda ayna için dizi görüntüsü
86 92 49
15 93 35
83 86 77

Eğme-Kaydırma (Shearing)

Eğme işlemi ile görüntünün bir tarafı sabit kalırken bir kenarını x eksnine yada ye ekseni üzerine kaydırma-ağme işlemi yapılmasıdır. 

Ölçekleme (Scaling)

Ölçekleme işlemi ile elimizde bulunan bir görüntü üzerinde büyültme veya küçültme işlemleri yapılarak görüntünün boyutunu değiştirmesi yada yaklaştırma-uzaklaştırmayı yapamaktadır. Görüntü üzerinde bulunan her pixel değerleriyle martis oluşmaktadır. Oluşan bu matris üzerinde yapılan değişiklikler ile işlemler gerçekleştirilmektedir. Matrise göre eğer pixeller çoğaltılır ise yakınlaşma veya azaltılırsa uzaklaşma oluşur. Bu şekilde görsellerin belirginleştirilmesi istenilen yerler incelenilir ve ya depolama işleminde kolaylık sağlar.

Döndürme (Rotation)

Döndürme işlemi ile resim belirlenen bir nokta etrafında bir açı (θ) değerinde çevrilir. Bir diğer ifadeyler giriş görüntüsündeki (x1,y1) koordinatını çıkış resmindeki (x2,y2) noktasına taşıma işlemidir.

Rotasyon Kod Örneği

#include <opencv4/opencv2/opencv.hpp>
int main()
{
 cv::Mat src = cv::imread("autonom.png", CV_LOAD_IMAGE_UNCHANGED);
 double angle = -45;

 // görüntüyü piksel koordinatlarında merkezi etrafında döndürmek için döndürme matrisi alınir
 cv::Point2f center((src.cols-1)/2.0, (src.rows-1)/2.0);
 cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);

 // sınırlayıcı dikdörtgen belirlenir
 cv::Rect2f bbox = cv::RotatedRect(cv::Point2f(), src.size(), angle).boundingRect2f();

 // transformation matrix ayarlanir
 rot.at<double>(0,2) += bbox.width/2.0 - src.cols/2.0;

 rot.at<double>(1,2) += bbox.height/2.0 - src.rows/2.0;

 cv::Mat dst;

 cv::warpAffine(src, dst, rot, bbox.size());
 cv::imwrite("rotated_autonom.png", dst);

 return 0;
}