Octave/MATLAB ile Görüntü işleme
Görüntü işleme artık hayatımızın her sahasına girmeye başladı. Savunma sanayii, güvenlik, otomasyon gibi daha birçok sahada artık görüntü işleme üzerine sistemler kurulmakta.Bizde bunun üzerine MATLAB’ın açık kaynak türevi olan Octave ile görüntü işleme üzerine bahsedelim. Octave üzerinde yazdığımız kodlar MATLAB üzerinde çalışabilir. Kodlar neredeyse birebir uyuşmaktadır.Benim Octave seçme sebebim açık kaynak ve ücretsiz olarak bulabilirsiniz. Üstelik boyut olarak çok küçük ve taşınabilir (portable) sürümü mevcut. Ufak ufak örneklerle başlayalım.
Öncelikle bir resim dosyasını okuyalım.
i=imread("resim adresi ");
İmread fonskiyonu resim dosyasını okumamızı sağlıyor. Açtığımız dosyanın piksel değerleri bir matris olarak i değişkenine atamaktadır.
Şimdi resmimiz kaç piksel ve renkli mi yoksa gri mi onu öğrenelim.Bunu da bize size fonskiyonu verecek.
[satir,sutun,renk] = size(i);
İmread fonksiyonu ile okuduğumuz resim dosyası bize matris olarak geldiğini söyledik. Bu matris aslında 3 boyutlu bir matris.x ekseninde sütun sayısı, y ekseninde satır sayısı ve z ekseninde 3 renk değeri bulunur.Bu 3 renk R(Red- Kırmızı), G (Green- Yeşil) ve B (Blue-Mavi) dir. Bunların her biri ayrı ayrı matristir.
Size fonskiyonu bize resmin satır ve sütun değerlerinin yanında üçüncü bi değer verir.Bununla resmimizin renkli mi yoksa gri mi olduğunu ayırt ediyoruz.Gri resimlerde bu matris sayısı 1 dir.
Boş bir matris oluşturma için zeros() fonksiyonun kullanacağız.
h=uint8(zeros(sat,sut,renk));
Zeros fonksiyonu matrisi double türünde üretir.unit8 fonksiyonu ile bu matrisimizi 8 bitlik bir integer tipinde bir matrise dönüştürüyoruz. Diğer bir yöntem ise son parametre olarak ‘uint8’ değerini vermek olacak.
h=zeros(sat,sut,renk,’uint8’);
Renk parametresini vermezsek 1 adet matris oluşturacaktır.
h=zeros(sat,sut,’uint8’);
Piksel okuma ve yazma işlemi de şu şekilde ;
R=İ(x,y,1); G=i(x,y,2); B=i(x,y,3);
Yazma ;
İ(x,y,1)=R; i(x,y,2)=G; i(x,y,3)=B;
Bunlar dışında matrislere çeşitli filtreler uygulayan ve kesme/ kırpma gibi işlemler yapabilen pek çok fonksiyonlar mevcut.Bunlar bir kaçını şöyle listeleyelim ;
imrotate(); % resmi döndürme işlemi imnoise(); % görüntü bulanıklaştırma işlemi yapar. fspecial(); % resme uygulanacak filtre için katsayılar matrisi oluşturur.
Daha fazla fonskiyonlar ve ayrıntılı bilgiler için http://octave.sourceforge.net/functions_by_package.php adresinden “image” kısmından bilgi alabilirsiniz.
Son olarak yaptığımız işlemleri görmek için imshow() fonksiyonu ile görebiliriz.
imshow(i);
Yaptığımız resimleri kaydetmek için ise imwrite() fonskiyonunu kullanacağız.
imwrite(i,”C:/resim.png”);
Bir örnek ;
Renkli bir resmi gri resme dönüştüren bir program
resim=imread("c:/octave/resimler/house.tiff"); [satir,sutun,p]=size(resim) gri=uint8(zeros(satir,sutun)) for i=1:satir for j=1:sutun r=resim(i,j,1); g=resim(i,j,2); b=resim(i,j,3); resim(i,j,4)==50; gri(i,j)=r*0.3+g*0.6+b*0.1; end end imshow(resim)