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 .
28 Mayıs 2013 Salı
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)
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(...)
function pushbutton2_CallBack(...)
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(...)
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'
[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.
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
set(handles.edit2,'String','Metin kutusu değişti') yazarak nesnenin üzerindeki yazıyı değiştirmiş oluruz.
Handles
- Edit1
- Edit2
- Edit3
- text1
- text2
- pushbutton1
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)
Kaydol:
Kayıtlar (Atom)