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.
İlk olarak biraz dijital görüntüyü oluşturan renk mevzusunda bahsetmek gerekirse;
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.
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.
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
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.
Ş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:
(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.
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
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
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.
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 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.
#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 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 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 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.
#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;
}
Orjinal resim:
Muhammed Şara
Bilgisayar Mühendisi