MATLAB’la GUI Programlamaya Giriş ve Bir Miktar Image Processing

Image Processing, Makale, Programlama Yorum yaz

Herkese mehaba, yazmayalı çok uzun zaman olmuş yavaş yavaş yazma işine yeniden başlayalım. Bu seferki konum MATLAB, daha doğrusu MATLABla kullanıcı arayüzü programlama. İlk örneğim belki yeni başlayanlar için biraz ağır gelecektir ancak bu benim Introduction to Computer Vision(Bilgisayarlı Görmeye Giriş) dersimin ödevi olduğu için ve benim MATLABla geliştirdiğim ilk arayüz olduğu için bunu anlatmaya çalışacağım.

Ödevim yani size anlatacağım uygulama “Fotoğraf işleme uygulaması” olacak. Sharping(Keskinlik), Smoothing(Yumuşaklık) ve Edge Detection(Şekil-Sınır Belirleme). En basit haliyle anlatmaya çalışacağım. Hadi başlayalım…

Bendeki Matlab versiyonu 2008b gerçi GUI geliştiren herhangi bir Matlab olabilir. Programı açtığınızda aşağıdaki gibi bir görüntü elde edeceksiniz.

Şekilde göründüğü gibi Start->MATLAB->GUIDE(GUI Builder)’a tıklarsanız karşınıza ne tür bir arayüz geliştireceğinizi belirteceğiniz bir menü gelecek. Buradan Blank GUIyi seçelim. Bundan sonra karşımıza gelecek olan ekran MATLAB’ın VisualStudio, Qt, Borland Delphi vb. grafik arayüz geliştirme araçlarına benzeyen bir pencere olacak.

Sağ tarafta kullanabileceğimiz componentler sol tarafta ise penceremiz mevcut. Bizim uygulamamızda 5 adet Button’a ihtiyacımız olacak bunlar Load Image, Save Image, Sharping, Edge Detection, Smoothing ve Exit. Smoothing’e bağlı olarak da bir slider’a ihtiyacımız var. Bir de fotoğrafımızı göstereceğimiz 1 Adet Axes eklememiz gerekiyor. GUI tarafından yapacaklarımız sadece slider’ın maximum ve minimum değerlerini belirlemek, buttonların yazılarını değiştirmek ve eğer isterseniz kullandığınız bütün objelerin isimlerini değiştirebilirsiniz ki bu da kodlamayı kolaylaştırır. Fakat ben üşengeç bir öğrenci olduğum için hepsini varsayılan ayarlarda bıraktım.

Kod tarafında ise sadece Smoothing örneğini kullanacağım. Zaten Smoothing bütün yaptığım işlemi özetler nitelikte. Kod bölümüne üst menüdeki GoToM-File.png buttonuyla ulaşılabilir. Gelen kodda bütün buttonların ve sliderın fonksiyonları hazır olarak gelmekte. Anlatacağım fonksiyonlar Load Image buttonuna ait Callback fonksiyonu(pushbutton1_Callback), Smoothing buttonuna ait Callback fonksiyonu.

Load Image buttonu bizim için axes’e çağırdığımız fotoğrafı yüleyecek. Axes’imin ismini axes1 olarak bırakmıştım.

function pushbutton1_Callback(hObject, eventdata, handles)
[FileName,PathName]  = uigetfile(
'*.jpg', 'Select the MATLAB  code file');
enableButtons(handles)
global im;
im = imread(strcat(PathName,FileName));
im = rgb2gray(im);
axis(handles.axes1);
imshow(im);
axis off

Kodu satır satır incelemek gerekirse…Aşağıdaki kod bize bir dosya seçim ekranı açar ve bize dosyanın yolunu ve dosyanın ismini bir vektör içinde bize geri döndürür. FileName değişkeninde anladığınız üzere dosya adı, PathName değişkeninde dosyanın yolu bulunur.

[FileName,PathName]  = uigetfile(
'*.jpg', 'Select the MATLAB  code file');

Bu aldığımız bilgileri axes1′e şu şekilde aktardık:

global im;
im = imread(strcat(PathName,FileName));
im = rgb2gray(im);
axis(handles.axes1);
imshow(im);
axis off

Matlabda global değişken tanımlamak da bir değişik eğer diğer methodlarınızın da aynı değişkeni görmesini istiyorsanız değişkeni kullanmadan önce global xx; yazarsanız bütün methodlarda aynı xx değşkenine ulaşabilirsiniz. Ben burada foroğrafımı diğer button listenerlardan görebilmek için için global olarak tanımladım.

imread() fonksiyonu anlayacağınız üzere fotoğrafımızı bulunduğu dizinden çekerek im değişkenine atıyor. im değişkenini eğer yanlışlıkla command windowda açmak isterseniz size dosyanızın büyüklüğü kadar bir matrix yazdırmaya başlayacaktır. Bu üzün sürer o yüzden im’yi değiştirdiğiniz her satırın sonuna noktalı virgül(;) koyun ki yaptığınız işlemi açık bir şekilde command window’a yazmaya kalkışmasın :)

rgbtogray() fonksiyonu açmış olduğumuz im değişkenindeki fotoğrafı renkli(rgb) halden gri(gray mode) hale sokar. Bu benim ödevimin bir kısıtlamasıydı ama aklınızda bulunsun.

axis(handles.axes1);

Bu satırdan sonra axis off satırına kadar bizim axis handler’ımız oluyor ve bu satırlar içinde değiştirdiğimiz her değer axes1′i etkiliyor.

Evet fotoğrafı açtık sırada bunu işlemek var ve dediğim gibi sadece Smoothing buttonunun callbackfonksiyonunu buraya yazacağım.

function pushbutton4_Callback(hObject, eventdata, handles)
global im;
H = fspecial('gaussian', [3 3], get(handles.slider1,'Value'));
im = imfilter(im,H,'replicate');
axis(handles.axes1);
imshow(im);
axis off

global im diyerek daha önceden söylediğimiz gibi global im değişkenini bu fonksiyonda kullanacağımızı belirtiyoruz.

fspecial() fonksiyonu image processing’e özel bir fonksiyon içinde ‘gaussian’,'unsharp’,'prewitt’ gibi özel filtreleri barındırıyor. Bu filtreler hakkında bilgi almak isterseniz wikipedia’da bol miktarda mevcut. fspecial bizim için bu filtreleri verdiğimiz parametrelere göre hazırlıyor. Burada önemli nokta sliderdan veriyi nasıl aldığımızdır.

get(handles.slider1,'Value')

yukarıdaki tek satırlık kod parçası slider1′de o anda seçili olan değeri direk olarak almaktadır.

imfilter() bu fonksiyonda bizim için convilition(sanırım Türkçeside konvülisyon) işlemini yapıp bize işlenmiş fotoğrafı geri döndürüyor. Daha önceden bu işle uğraşmış olanlar conv2() fonksiyonunu neden kullanmadığımızı sorabilir. conv2 sadece siyah beyaz fooğraflarda işe yaramakta, ama imfilter() fonksiyonunu istediğimiz fotoğrafta kullanabiliriz.

axis(handles.axes1);
imshow(im);
axis off

Yine daha önce kullandığımız gibi axis handlerımızı çağırıp gösterdiğimiz fotoğrafı yenisiyle değiştiriyoruz.

Dosyamızı açtık, üzerine filtrelerimizi uyguladık hadi artık kaydedelim…

function pushbutton6_Callback(hObject, eventdata, handles)
global im;
[FileName,PathName] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
'*.*','All Files' },'Save Image');
imwrite(im,strcat(PathName,FileName));

Bu işleminde çok kolay olduğunu farketmişsinizdir. Global değişkenimiz im’yi bu fonksiyonda da görüyoruz.

uiputfile() bize bir “save file” penceresi açarak kaydedeceğimiz yeri ve dosyayı kaydedeceğimiz ismi soracaktır. Sonra yine dosyayı açarken yaptığımız gibi FileName ve PathName değişkenlerini imwrite() fonksiyonunda kullanarak dosyayı istediğimiz formatta ve isimde harddiskimize yazdırabiliriz.

Bu yazımda fotoğraf işlemeden, Matlab GUI’sinden, fotoğraf işlemede MATLAB’ın sağladığı kolaylıklardan bahsettim. Size bir yol haritası göstermeye çalıştım bir faydası olduysa ne mutlu bana… Ödevimin kaynak kodlarını ve fig dosyasını aşağıdaki linkden alabilirsiniz.

Image Processor 1.0

Yazar: Barış
Etiketler: , , , |


14 Cevap to “MATLAB’la GUI Programlamaya Giriş ve Bir Miktar Image Processing”

  1. Fatih Diyor ki:

    Hidden due to low comment rating. Click here to see.

    Poorly-rated. Like or Dislike: Thumb up 0 Thumb down 3

  2. Barış Diyor ki:

    İlgin için teşekkürler. Matlabda ben o kadar ilerlemedim. Hatta en son geldiğim nokta bu öğrendikçe buraya ekleyeceğim.

    Beğendim - Beğenmedim: Thumb up 2 Thumb down 0

  3. feridun bitirim Diyor ki:

    eline sağlık kardeş güzel olmuş ama insan yaptığı uygulamanın kodlarını atmaz mı:)

    Beğendim - Beğenmedim: Thumb up 1 Thumb down 3

  4. Barış İNANÇ Diyor ki:

    Yazının altındaki Image Processor 1.0 linkinden görebilirsin kolay gelsin…

    Beğendim - Beğenmedim: Thumb up 3 Thumb down 0

  5. Bruce Diyor ki:

    Elinize sağlık. Çok güzel anlatmışsınız.Benim size bir sorum olacak.Ben bir GUI tasarımı yaptım ve bunu Matlab Builder for NE kullanarak ASP.NET siteye aktarmam gerekiyor.Bu konuda yardımcı olabilirmisiniz? Teşekkürler.İyi çalışmalar.

    Beğendim - Beğenmedim: Thumb up 1 Thumb down 1

  6. mehmet Diyor ki:

    merabalar bu arayuze treshold ve histogram tuşu eklemek istersek nasıl yapılır.yardımcı olabilirsen sevinirim.

    Beğendim - Beğenmedim: Thumb up 1 Thumb down 1

  7. mehmet Diyor ki:

    m-file olarak yazabiliyorum ama guiye uyarlayamıyorum treshold ve histogtramı arayuzu nasıl hazırlayacagımıda bılıyorum sorunum sadece guiye treshold ve histogram m-file larını nasıl uyarlaryazarak yazabilirim.yardım ederseniz sevinirim.teşekkürler

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 0

  8. Steve Diyor ki:

    merabalar bu arayuze treshold ve histogram tuşu eklemek istersek nasıl yapılır.yardımcı olabilirsen sevinirim.

    Beğendim - Beğenmedim: Thumb up 1 Thumb down 0

  9. ezgi Diyor ki:

    merhabalar ben özyüz yöntemi ile matlab de yüz tanıma yapıcam ama matlab hiç bilgim yok yardımcı olursanız sevinirim

    Beğendim - Beğenmedim: Thumb up 2 Thumb down 1

  10. Betül Diyor ki:

    Ben çalıştıramadım:S

    Beğendim - Beğenmedim: Thumb up 2 Thumb down 1

  11. mert Diyor ki:

    kardeş selamün aleyküm ,
    yazı için çok teşekkürler baya yararlı oldu,şimdi argadaşlar sayfada yazanlan yola çıkarsanız yetersiz kalıyor çünkü enableButtons anlatılmamış program orada hata veriyör.onunçün direk kodu indirip inceleyin derim,tekrar saolasın kardeş yolun açık olsun zihninde!

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 1

  12. ulas Diyor ki:

    Merhaba benim bu gui ile ilgili bir sorum olacak, matlab’ın bu gui geliştirme aracını kapattığımızda tekrar nasıl açarız.

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 0

  13. Tunga67 Diyor ki:

    Ellerine sağlık çok güzel bi yazı olmuş. Ben gui’ye yeni başladım ve kendimce öğrenme amaçlı bazı ufak uygulamalar yapmaya çalışıyorum. Bu konuda sizlere bir sorum olacak yardımcı olabilirseniz çok sevinirim. Ben edit text’e bir denklem yazıp örneğin x^2*5*x gibi daha sonra bunun türevini ya da integralini alıp başka bir edit text kutucuğuna yazdırmak istiyorum bunu nasıl yapabilirim doğal olarak str2num gibi komutlar işe yaramadı :)
    şimdiden teşekkürler

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 0

  14. kitap özet Diyor ki:

    çok güzel bir yazı teşekkürler işime yarayacak.

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 0

Yorum Yazın


+ 1 = 10