Bir önceki yazıda nispeten basit bir arayüz tasarımı üzerinde durmuştum. Bu yazımda, bir önceki yazıya gelen yorumları da dikkate alarak yeni bir arayüz tasarımı üzerinden MATLAB GUI ile ilgili aktarımlarıma devam edeceğim.Bir önceki yazımda bahsettiğim gibi veritabanı uygulaması da yapacağız ancak Matlab yazılarının hedef kitlesini düşünerek görüntü işleme araç kutusu hakkında da bilgi vereceğim.Öncelikle görüntü işleme araç kutusu hakkında biraz bilgi vererek başlayalım. Matlab aklınıza gelebilecek hemen hemen bütün formatları okuyabilir. imread fonksiyonu ile görüntü renk değerlerini bir matrise alabilirsiniz. Bildiğiniz gibi görüntü gri seviyeli (grayscale) ya da rgb olabilir. Grayscale görüntüler için elde görüntü seviyeleri iki boyutlu bir matrise atanacaktır. Diyelimki elinizde mxn lik bir görüntü var A = imread(‘cameraman.tiff’); dediğimizde, A matrisi mxn boyutlarında bir matris olacaktır. (1,1) lokasyonunda görüntünün renk seviyesi bulunacaktır. Grayscale ise 0 dan 255 kadar bir değer, RGB ise (1,1,1) lokasyonunda 0 dan 255 e kadar R (Red) değeri, (1,1,2) lokasyonunda 0 dan 255 e kadar G (Green) değeri, (1,1,3) lokasyonunda 0 dan 255 e kadar B (Blue) değeri bulunacaktır. Matlabı sadece görüntü formatını çevirmek için kullanacaksanız, yapacağınız tek şey A matrisini istediğiniz formatta yazdırmanız sağlayacak imwrite fonksiyonunu kullanmak olacaktır.
Kullanıcı arayüzünü oluşturmadan önce kesinlikle GUI nizin nasıl olmasını ve ne yapmasını istediğinizi kağıda dökmenizde fayda var diyerek MATLAB kullanıcı arayüzü yazımızın ikincisine başlayalım. MATLAB, oluşturduğunuz kullanıcı arayüzü için bir .m dosyası oluşturur. Bu dosyada arayüze koyacağınız bileşenlerin özellikleri eklenir. Bu dosyaların yapısına bakacak olursak;1. MATLAB command prompt ta help dosya_adı yazdığınızda görüntülenecek yardım satırları. Bu satırları yazdığınız herhangi bir .m dosyasına da ekleyebilirsiniz.

Sekil 1
Sekil 1

2. Bileşenlerin oluşturulması ve işlenecek veriler için değişken tanımlamalarını3. figure ve GUI de olmasını istenen bileşenlerin yaratılması.4. Bileşenler için “callback” ler.5. Kullanıcının yazacağı fonksiyonlar.Görüntü işleme araç kutusu sadece mühendislik eğitimi alan kişilerin kullanacakları bir araç kutusu olarak düşünmemek gerekir. MATLAB’ın sunduğu özelliklerden faydalanmak oldukça kolaydır. Diğer programların yanında MATLAB’ın araç kutusunu da değerlendirmekte yarar olacağını düşünüyorum. MATLAB’ın güçlü olduğu alanlardan birisi de matris operayonlarının kolaylıkla yapılabilmesinden gelmektedir. Görüntü dosyalarını okuyarak matrislerde saklamanıza olanak verir. Bir çok formatta görüntüyü okuyabildiğiniz gibi“Image Acquisition Toolbox” kullanarak gerçek zamanlı görüntüleride matris değişkenlerine alabilirsiniz. MATLAB görüntü işleme araç kutusu 250 den fazla hazır fonksiyon sunmaktadır. Bu yazımızda en fazla kullılanlarından söz edeceğiz. Bu yazının devamında basit bir görüntü işleme programı yazmış olacağız. Aşağıdaki gibi GUI tasarımına başlayalım. 3 “pushbutton” ekledik, temelde yapacağımız 3 görev olsun istedik. Düğmelerin isimlerinden de anlaşılıyor ne ieş yarayacakları. Bu işlemi nasıl yapacağımızı bir önceki yazımızda anlatmıştık. Düğmeleri hizaya sokmak için şekilde işaretlenmiş kısma tıklayıp nasıl bir hizalama yapacağımızı seçmemiz yeterli olacaktır.

Sekil 2
Sekil 2
Sekil 3
Sekil 3

Görüntü ile yapılacak işlemleri popup menude sıralayacağız. Popup menuden seçilen fonksiyona göre başlangıçta görünmez olan fonksiyonla ilgili girdi parametreleri açılacak ve kullanıcının seçim yapması sağlanacak. Bu örnekte başlıca fonksiyonlarımız; görüntünün RGB den gray scale e çevrilmesi, görüntü boyutlarının değiştirilmesi, histogram bilgisinin çıkarılması, histogram eşitleme yapılması, görüntü renklerinin ters çevrilmesi, görüntünün döndürülmesi, görüntü renklerinin zenginleştirilmesi, bluring ve bütün bu işlemlerin görüntünün seçilecek belirli bir bölgesine yapılması şeklinde olacaktır. Popup menu açıldığında görünmesini istediğiniz seçenekleri popup menu özelliklerinden “string” i seçerek altalta yazmanız gerekir. GUI den seçilenin hangisi olduğunu daha sonra açıklayacağız. GUI de yapacağımız işlemin bölgesel olarak mı yoksa tüm görüntüye mi uygulanacağını belirlyeceğimiz radiobutton lar kullanmamız gerekiyor. Bu buttonları “Button group” altında toplayarak işimizi kolaylaştırıyoruz hem de daha güzel bir görüntü sağlıyoruz. Aşağıda görünen tüm bileşenler programınızı çalıştırdığınızda görünemeyecektir. Önceki yazıda anlattığımız gibi; belirli bir işlem için gereken bileşenlerin GUI de her zaman görünmelerine gerek yok. Bu işlemi başlangıçta görünmesini istemediğiniz bileşenlerin “Inspector” dan Visible özelliklerini ‘off’ yaparak sağlayabilirsiniz. Ancak program içerisinde kullanmadan önce “set(handles.bilesen_ismi,’Visible’,’on’)” yapmayı unutmamamız gerekiyor. İşimiz bittiğinde ise “set(handles.bilesen_ismi,’Visible’,’off’)” yaparız.Yukarıda anlattıklarımızı gerçekleştireceğini düşündüğümüz GUI yapısı aşağıdaki şekildeki gibi olacaktır. Çalıştırıldığında ise şekil 5 teki gibi görünecektir.

Sekil 4
Sekil 4
Sekil 5
Sekil 5

Dosya okuma işlemine bakacak olursak;function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved – to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename=imgetfile;
filename değişkeninde dosyanın tam yeri tutulur, bu satırdan sonra aşağıdaki satırları yazarak hem görüntünün Workspace de matris değişken atılmasını hem de GUI de görüntülenmesini sağlamış oluruz.
….filename=imgetfile;goruntu = imread(filename);h=handles.axes4;axes(h);imshow(goruntu);
Burada önemli noktalardan bir tanesi de axes komutunun kullanımıdır. Çizdirmek istediğiniz grafiğin ya da görüntülemek istediğiniz imgenin sizin istediğiniz eksenlere çizmesini sağlamalısınız. Çok karşılaşılan bir problemdir!
Öncelikle çizdirmek istediğimiz eksen için handle ı almalıyız. Bunuh=handles.axes4; satırı ile yaparız. (axes4 ekranın solunda kalan eksen)
daha sonrada bu eksenin şu an için seçilmiş eksen olduğunu bildirmemiz gerekiyor.axes(h); diyerekte bunu gerçekleştiriyoruz.

Sekil 6
Sekil 6

Açılan diyalog kutusundan seçtiğiniz görüntü eksene çizilecektir. Tam bu sırada (break point koymanız gerekir!) Workspace e bakarsanız, goruntu isminde seçtiğiniz imaja bağlı olarak boyutunda bir matris değişkeni görürsünüz. (Imaj gri seviyeli ise 2 boyutlu bir matris olacaktır, değilse 3 boyutlu 3. boyutu RGB den her birini tutan bir matris olacaktır.)Aşağıdaki görüntüyü yükleyerek önce histogramına bakalım (hangi renkten kaç tane olduğunun bulunması). MATLAB’da bu işlemi imhist ile gerçekleştirebiliriz.

Şekil 7
Şekil 7

goruntu = imread(filename);h=handles.axes3;axes(h);imhist(goruntu);

Şekil 8
Şekil 8

Tabi bu işlemlerden önce bir takım kontrollerin yapılması gerekir. En başta okunmuş bir görüntü var mı? Dikkat ederseniz “UYGULA” düğmesi birden fazla işlem için ortak bir düğme bu sebeple popupmenu de hangi işlemin seçildiği kontrol edilmelidir. Bunun için;h=handles.popupislemler;islem = get(h,’Value’);
satırları ile hangi sıradaki işlemin seçildiğini bulmak gerekir sonrasında iseswitch(islem)case 1…case 2…endsatırları ile işlemler gerçekleştirilir. Tabi burada işlemin bölgesel olarak mı yoksa tim görüntüye mi uygulanmak istediği de kontrol edilmelidir. Bunun için de;bolgesel_islem = handles.radio_tumu;bolgesel_islem = get(bolgelsel_islem,’Value’);%MATLAB’ın güzel yanlarından biriif(bolgesel_islem==1)%goruntunun tumu ile ilgili işlemlerelse%goruntunun seçilen bölgesi ile ilgili işlemler%seçilen bölgenin sınırlarının alınması gerekiyorsag_ust_x=handles.sag_ust_x;sag_ust_x=eval(get(sag_ust_x,’String’));sag_ust_y=handles.sag_ust_y;sag_ust_y=eval(get(sag_ust_y,’String’));sol_alt_x=handles.sol_alt_x;sol_alt_x=eval(get(sol_alt_x,’String’));sol_alt_y=handles.sol_alt_y;sol_alt_y=eval(get(sol_alt_y,’String’));…end
Şimdilik bu kadar…Devamı gelecek…Kalan bileşenler için anlatım bir sonraki yazıda…GUI tasarımı ile ilgili daha fazla bilgi (genel bilgiler) içinhttp://www.asktog.com/basics/firstPrinciples.html.http://www.fast-consulting.com/GUI Design Handbook/ GDH_FRNTMTR.htm.http://www.usabilityfirst.com/glossary/main.cgi.http://www.usabilitynet.org/management/b_design.htm.linklerine bakabilirsiniz.