28 Mayıs 2013 Salı

Axes içine Resim ekleme

Resim Ekleme

1) Önce bir axes nesnesini GUI'ye taşıyın .

2) MATLAB klasörü içine 1.jpg dosyasını kopyalayın .

3) degisken = image(imread ( '1.jpg ' ) )  komutu ile resim axes içinde görüntülenecektir .



23 Mayıs 2013 Perşembe

MATLAB-Break komutu

Öyle bir komuttur ki bazen ne yapacağınızı? Hatanın neden kaynaklandığını bulamayabilirsiniz. Bunun sebebi "Break" komutunu kullanmamanızdır.

Örnek olarak bir diziniz olsun. Dizinizdeki bir eleman sorgulanıyor ve bulunduğunda 10 sayısını dönderiyor bulamaz ise 0 sayısını döndermesini istiyorsunuz. 

Dizi
1. elemanı  : A
2. elemanı  : B
3. elemanı  : C

Ana Programdan fonksiyonu  

deger=Bul(Dizi,'A') 

şeklinde çağıralım. Normalde Dizi içinde A olduğundan değerin 10 olması gerekirken maalesef 0 diye gözükecektir. Bunun sebebini irdeleyelim ...


function a=Bul(Dizi,Str)

uz=length(Dizi)

for i=1:uz

     if strcmp(Dizi(i),Str) = = 1
        a=10
     else
        a=0
     end

end


fonksiyonu yukarıdaki gibi ise analiz ettiğimizde :

uz=3


i=1 için Dizi(1) =A? Adır o halde a=10 olacaktır. Yalnız döngü daha bitmedi ...

i=2 için Dizi(2) =A? A değildir o zaman a=0 olacaktır. Yalnız döngü daha bitmedi ...

i=3 için Dizi(3) =A? A değildir o zaman a=0 olacaktır. Döngü sona erdi. 

Şu anda a değeri kaçı göstrerir sorusuna , 0 cevabını vereceğiz. Bu basit örnekte bile işleri karıştıran olguda istenilen bulunduğunda döngüden çıkılması yani döngünün kırılması gerekmektedir. Bu yüzden Break komutunu if bloğu içinde a=10 sayısından hemen sonra kullanmamız gerekecektir.


Önceki durumda çalıştığında 

deger=Bul(Dizi,'A')



function a=Bul(Dizi,Str)
uz=length(Dizi)
for i=1:uz
     if strcmp(Dizi(i),Str) = = 1
        a=10
     else
        a=0
     end
end

deger=0

Sonraki durumda break komutu eklenince çalıştığında 

deger=Bul(Dizi,'A')


function a=Bul(Dizi,Str)
uz=length(Dizi)
for i=1:uz
     if strcmp(Dizi(i),Str) = = 1
        a=10 
        break
     else
        a=0
     end
end


deger=10


19 Mayıs 2013 Pazar

GLOBAL değişken

MATLAB içinde bir değişkenin tüm yerde geçerli olması isteniyorsa o zaman global değişken kullanılır. Kullanım şekli :

Global değişkenadı

Bu değişken eğer GUI içerisinde kullanılıyorsa ve tüm nesneler tarafından bu değişken kullanılacaksa o halde yapılması gereken her nesnenin üzerinde global değişken adı şeklinde tanımlanmalıdır.

function pushbutton1_CallBack(...)
global x
x=3
set(handles.edit1,'Visible','off')
set(handles.edit2,'Visible','off')



function pushbutton2_CallBack(...)

global x
x=x+1
set(handles.edit1,'Visible','on')
set(handles.edit2,'Visible','on')
msgbox(x) 



Sonuç olarak ekrana x'in değeri 4 olacaktır. 

GUI-Visible

Bir nesneyi ekranda görünür yapma veya gizleme olarak Visible özelliğini kullanacağız. Örnek olarak birinci düğmeye basınca 2 edit kutusunu gizleyecek diğer düğmeye basıncada 2 edit kutusunu tekrardan ekranda gösterecek program için :


function pushbutton1_CallBack(...)

set(handles.edit1,'Visible','off')
set(handles.edit2,'Visible','off')



function pushbutton2_CallBack(...)

set(handles.edit1,'Visible','on')
set(handles.edit2,'Visible','on')



Popupmenuye eleman ekleme ve seçileni gosterme

1900 ile 2013 arasındaki sayıları GUI açılınca bir popupmenuye ekleyecek ve düğmeye basıncada popup içinden seçilen mesajla ekrana getirecek olan program :

function x_OpeningFcn(...)
:
:
:
handles.output=hObject;

for i=1900:2013

    i=num2str(i)
    a=get(handles.popupmenu1,'String')
    f=[a;i]
    set(handles.popupmenu1,'String',f)

end

:
guidata(hObject,handles)


function pushbutton1_CallBack(...)

deger=get(handles.popupmenu1,'Value')
liste=get(handles.popupmenu1,'String')
k=liste(deger)
msgbox(k)


Eğer bir metin kutusuna sonucu göstermek istersek ozaman:

set(handles.edit1,'String',k) yazmamız yeterli olacaktır.  Dikkat edilecek husus bir nesneye bilgi yazılacaksa o bilginin string tipinde olması lazımdır. Sayısal bir ifade elimizde varsa o zaman num2str ile bu ifadenin stringe dönüşümü sağlanacaktır. 




Listbox içinden secilen elemanı gosterme


a=get(handles.listbox1,'value')

lst=get(handles.listbox1,'String')

k=lst(a)

k=str2double(k)

msgbox(['Degerimiz : ' num2str(k)])


18 Mayıs 2013 Cumartesi

mixt_model

rand('seed',sed)
[l,c]=size(m)
Pacc=P(1);
for i=1:c
     t=Pacc(i-1)+P(i);
     Pacc=[Pacc t];
end
X=[];
y=[];
for i=1:N
     t=rand;
     ind=sum(t>Pacc)+1
    X=[X; mvnrd(m(:,ind)',S(:,:,ind),1)];
    y=[y ind];
end
X=X'

17 Mayıs 2013 Cuma

Örnek Kodlama mixt_model

Örnek Kodlama 

P=[p1 p2 .. pn]

if 1-sum(P)>0
   Pyeni=1-sum(P)
   P=[P Pyeni]
end

P_uz=length(P)
for i=1:P_uz
     m(:,i)=...
     S(:,:,i)=...
end
.....

mixt_model (m,S,P,N,sed)

şeklinde olacaktır.

Mixt_Model.m içinde out of bounds hatası

Gaussian Mixture model kullanırken m,S,P,N ve sed değerlerini verdiğinizde eğer hata mesajı alıyorsanız ne yapmalısınız? 

Mixture model çalışırken verilen koordinatlar içerisinde hangi merkeze verinin düştüğünü ve kaçıncı yerde olduğu bilgisinide y adlı bir index değerde bizlere sunmaktadır. Program işleyişi olarak hata aşağıdaki gibi ise :

m(:,ind) out of bounds yazıp mnvrnd dosyasını gösteriyorsa ozaman yapmanız gereken önce priority değerlerinin doğru olup olmadığını kontrol etmektir. 

P[ p1 p1 p3 ... p] değerlerine sahip priority değerleridir. Bu değerler kaç gaussian varsa her birinin önsel veya öncelikli olma olasılığıdır. Program işleyişi sırasında öncelikle P'nin toplamının 1 olup olmadığını kontrol ettirmeniz gerekecek sonrada P_uz=length(P) değerine aldığınız uzunluk bilgisi kadar m ve S'yi doldurmanız gerekecektir.Boyutları bu tek düze sistem içinde yaparsanız hata riskini kontrol etmiş olursunuz.

GUI - HANDLES

Bir GUI içerisinde birden fazla nesne olabilir bunlardan 3 tanesi edit nesnesi, 2 tanesi static text nesnesi ve bir tanesi ise pushbutton olarak adlandırılan düğme nesnesi olabilir. Tüm nesnelerin üzerinde yazan bilgi 'String' bilgisidir. Program çalışırken edit2 nesnesinin üzerinde yazan yazıyı değiştirmek için çalışan figure içerisinde  findobj komutu ile veya handles ile yaparız. Handles her bir nesneyi kendine bağlamış bir parent görevi görmektedir. Bu yüzden

Handles

  • Edit1
  • Edit2
  • Edit3
  • text1
  • text2
  • pushbutton1 
ile yukarıdaki nesneler figure içinde bulunmaktadır.

set(handles.edit2,'String','Metin kutusu değişti') yazarak nesnenin üzerindeki yazıyı değiştirmiş oluruz.

16 Mayıs 2013 Perşembe

Litbox'dan eleman çekmek


LISTBOX

Listbox nesnesinden eleman almak için : 

1) Nesne GUI içerisinde bulunur.

2) Nesne içerisindeki String değeri alınarak bir mesajla ekrana getirilir. 



function pushbutton1_CallBack(...)

         deg1=get(handles.listbox1,'String')
         msgbox(deg1)

Listbox nesnesine eleman ekleme

LISTBOX

Listbox nesnesine eleman eklemek için : 

1) Nesne GUI içerisinde bulunur.

2) Nesne içerisindeki String değerine istenilen ifade eklenerek işlem sonlandırılır. 


function pushbutton1_CallBack(...)

         deg1=get(handles.edit1,'String')
         set(handles.listbox1,'String',deg1)