-->

  • Matlab ile Kırmızı Mavi ve Yeşil Obje Takibi

    Matlab ile Kırmızı Mavi ve Yeşil Obje Takibi
    Obje takip aracını gui ortamında yapmak istiyorum. Yapacağım işlemleri adım adım anlatmak istiyorum.

    Dosyaları indirmek için tıklayınız


    1. Adım: Gui ortamına geçmek için fotografta görünen kısma (command windowa) guide yazınız daha sonra enter a basınız karşımıza GUIDE Quick Start menüsünden OK butonuna basınız.

    2. Adım: Ok butonuna basıldıktan sonra fotograftaki guide arayüzü karşımıza gelmektedir.


    3. Adım: Karşımıza gelen arayüzün sol tarafında bulunan nesnelerden, push button, pop-up menu, text ve axes nesnelerine ihtiyacımız var. Axes nesnesinde telefondan aldıgımız videoyu görüntüleyecegiz. Text nesnesinde ise debug işlemi yapacagız.



    4. Adım: Nesnelerimizi üzerlerine tılayarak ızgaranın üzerine bırakalım ve boyutlarınında degişiklik yapalım. Nesneleri benim konumlandırdıgım şekilde konumlandırınız.

    Görüntü işleme yaparken işlenen görüntüyü ne kadar küçük görüntülersek verimlilik artar. Eger videoyu görüntülerken çok büyük yaparsanız sisteminiz de daha fazla geçikme görülür. 

    5. Adım: Nesnelere ikişer defa tıklayarak açılan properties menusünden renklerini, yazı büyüklügünü ve yazılarını degiştiriyorum.


    Backgroundcolor ile arkaplan rengini,
    Fontsize ile yazı büyüklügünü,
    Fontwight ile yazı kalınlıgını,
    ForeGroundcolor ile yazı rengini,
    String ile buton yazısını degiştirdim.

    Sizde bu adımları izleyerek istediginiz arayüzü tasarlayabilirsiniz.

    6. Adım: Bu adımda pop-up menu kullanımını anlatacagım. Yani açılır menüye nasıl birden fazla yazı ekleyecegimizi anlatacagım. Pop-up menu ile sürekli yazılıma giderek com baglantısının yerini degiştirmemize gerek yok. Pop-up a tıklayarak, arduino hangi prottaysa o portu işaretlememiz yeterli oluyor.



    İşlemleri anlatayım; pop-up a iki defa tıkladım açılan properties yani özellikler menüsünden kara içerisinde ki ikona tıkladım ve açılan String menüsünün içine com 5, com 6 ve com 4 yazdım.

    6. Adım: Konuya baya ilerlemişken hata yaptıgımı farkettim. Birden fazla rek takibi yapacagız ama hangi rengi takip edecegimizi belirleyen bir pop-up menu oluşturmadım. Hemen fotoda ki gibi araya sıkıştırıyorum bi tane.



    ÖNEMLİ BRİFİNGİ OKUYUNUZ!!! 

    Arayüz tasarımımız bitmiştir gelelim kodları yazmaya. Önce arduinonun hangi portta oldugunu belirleyecek olan pop-up1'in kodlarını yazalım. Daha sonra arduinoya baglanmak için oluşturdugum BAGLAN butonunun kodlarını, arduino debug işlemi için gerekli static text4'ün kodlarını ve renk takibinde hangi rengi takip edecegimizi belirlemek adına pop-up2'nin kodlarını yazalım en son görüntü işleme kodlarını yazalım.

    7. ADIM: Bu adım da pop-up menu kullanımını anltacagım. Pop-up a sag tıklayarak wiev callbaks sekmesinden calback e tıklayınız. 


    Kodlar:
    sira = get(hObject,'Value');
    global com;

    if sira==1
        com='COM5';
    elseif sira==2
        com='COM6';
    elseif sira==3
        com='COM7';
    end

    8. ADIM: Baglan butonu ile arduinoya baglancagız ve durumu static text'e yazdıracagız.



    Kodlar:
    global com;
    global arduinouno;
    arduinouno=arduino(com,'Uno');
    set(handles.text4,'String','Baglantı Kuruldu');

    GLOBAL NEDİR ?
    Normalde nesneler arasında degişken paylaşımı yoktur bunu saglamak amacıyla bir degişken global tanımlanırsa ve başka bir nesnede de aynı degişken global tanımlanırsa, iki nesne arasında degişken kullanılabilir hala gelir.

    9. ADIM: Takip etmek istedigimiz rengi belirlemek için pop-up ikiden seçim yapacagız. Yazacagım kodlar anlamlı gelmeyebilir, görüntü işleme kısmında anlayacaksınızdır.


    renk degişkenine takip edecegimiz renk kodunu atatık.

    Kodlar:
    sira = get(hObject,'Value');
    global renk;

    if sira==1
        renk=1;
    elseif sira==2
        renk=2;
    elseif sira==3
        renk=3;
    end

    10. ADIM: GÖRÜNTÜ İŞLEME
    Bu adımı kodlar üzerinden anlatmak istiyorum.

    Kodlar:

    function varargout = rgb_takip_araci(varargin)
    % RGB_TAKIP_ARACI MATLAB code for rgb_takip_araci.fig
    %      RGB_TAKIP_ARACI, by itself, creates a new RGB_TAKIP_ARACI or raises the existing
    %      singleton*.
    %
    %      H = RGB_TAKIP_ARACI returns the handle to a new RGB_TAKIP_ARACI or the handle to
    %      the existing singleton*.
    %
    %      RGB_TAKIP_ARACI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in RGB_TAKIP_ARACI.M with the given input arguments.
    %
    %      RGB_TAKIP_ARACI('Property','Value',...) creates a new RGB_TAKIP_ARACI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before rgb_takip_araci_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to rgb_takip_araci_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES

    % Edit the above text to modify the response to help rgb_takip_araci

    % Last Modified by GUIDE v2.5 14-Sep-2017 18:19:20

    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @rgb_takip_araci_OpeningFcn, ...
                       'gui_OutputFcn',  @rgb_takip_araci_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end

    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT


    % --- Executes just before rgb_takip_araci is made visible.
    function rgb_takip_araci_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to rgb_takip_araci (see VARARGIN)

    % Choose default command line output for rgb_takip_araci
    handles.output = hObject;

    % Update handles structure
    guidata(hObject, handles);

    % UIWAIT makes rgb_takip_araci wait for user response (see UIRESUME)
    % uiwait(handles.figure1);


    % --- Outputs from this function are returned to the command line.
    function varargout = rgb_takip_araci_OutputFcn(hObject, eventdata, handles)
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)

    % Get default command line output from handles structure
    varargout{1} = handles.output;


    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global arduinouno;
    global renk;

    axes(handles.axes1) %axes te görünütleme yapabilmek için özelliklerine erişim saglıyoruz

    while 1

    cam=ipcam('http://192.168.43.1:8080/videofeed', '', '', 'Timeout', 300);
    img = snapshot(cam);

    i=1;

    yesil=0;

    y=img(:,:,renk); %görüntünün rgb katmanlarından birisi çıkartılıyor

    grayimg=rgb2gray(img); %görüntü griye çevrilir

    imsubt = imsubtract(y, grayimg); %y den grayimg çıkartılıyor

    medfilt = medfilt2(imsubt, [3 3]); %3 e 3 lük bir filtre uygulanır

    level=graythresh(medfilt); %filtrenin parlaklık degeri belirlenir

    bw = im2bw(medfilt,level); %level degerine göre görüntü siyah ve beyaz px lere dönüştürülür

    bw = bwareaopen(bw,100); %görüntüde ki 100 px den bagımsız nesneler silinir

    se=strel('disk',5); %Yarıçapı 10px olan disk biçiminde yapısal element oluşturuyoruz

    bw=imclose(bw,se); %Yapısal element yardımıyla iç kısımdaki boşluklar kayboldu

    bw=imfill(bw,'holes'); %Resimde çukur diye nitelendirilen yerleri dolduruyoruz

    bw2 = bwlabel(bw, 8); %bunu bilmiyorum

    stats = regionprops(bw2, 'BoundingBox', 'Centroid'); %bw2 görüntüsünde ki nesnelerin özellikleri                                                                                             %stats'a atanıyor

    [satir,sutun]=size(bw2); %fotograflara dönüştürülmüş resmimizin genişligini ve yüksekligini                                                      %hesaplıyorum

    imshow(img);

       for object2 = 1:length(stats) %rgb için yapılan işlemler
           boundingBox{object2} = stats(object2).BoundingBox; % Objeyi çevreleyen dikdörtgenin                                                                                                             %koordinatları
           bb = stats(object2).BoundingBox; %cismin özellikleri bb ye atanıyor
           rectangle('Position',bb,'EdgeColor','r','LineWidth',2); %cismin etrafına dikdörtgen cizdiriliyor
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           x_left = boundingBox{object2}(1); %objenin sol üst köşesinin x degerini alır
           y_left = boundingBox{object2}(2); %objenin sol üst köşesinin y degerini alır
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           cent = stats(object2).Centroid; %cismin merkez noktasının koordinat bilgilerini cent degişkenine                                                          %atar
           x_cent=cent(1); %cent degişkeninde ki x koordinat bilgisini x1 e atar
           y_cent=cent(2); %cent degişkeninde ki y koordinat bilgisini y1 e atar
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           %aracımız ekrandaki nesnenin genişligine göre hareket edecegi için
           %nesnenin x ve y genişliklerini hesaplattıracagız
           x=2*(x_cent-x_left);
           y=2*(y_cent-y_left);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  

           %%%%%%%%%%%%%%%%%
           %                        %                        %
           %                        %                        %
           %      1. bölge     %      2. bölge     %
           %                        %                        %
           %                        %                        %
           %%%%%%  merkez %%%%%%%
           %                        %                        %
           %                        %                        %
           %      3. bölge     %      4. bölge     %
           %                        %                        %
           %                        %                        %
           %%%%%%%%%%%%%%%%%

           %nesnenin ekrandaki büyüklügüne göre aracımızı hareket ettirecegiz.
           if x>26 || y>26 %nesnenin kenar büyüklüklerinden 1 tanesi
                                    %26 px'lden büyükse araç hareket algoritması
                                    %çalışacak
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               if x_cent<satir/2 && y_cent<sutun/2 %rgb obje 1. bölgede bulunuyorsa
                   if y_cent<sutun/2 %arac önce ileriye gidecek
                       writeDigitalPin(arduinouno,'D4',1);
                       writeDigitalPin(arduinouno,'D6',1);
                       writeDigitalPin(arduinouno,'D8',1);
                       writeDigitalPin(arduinouno,'D10',1);
                       set(handles.text2,'String','ileri');
                   end
                   if x_cent<satir/2 %arac sola dönecek
                       writeDigitalPin(arduinouno,'D5',1);
                       writeDigitalPin(arduinouno,'D7',1);
                       writeDigitalPin(arduinouno,'D8',1);
                       writeDigitalPin(arduinouno,'D10',1);
                       set(handles.text2,'String','sol dön.');
                   end
               end %obje 1. bölgede bulunuyordu, şimdi merkeze yerleşti
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               if x_cent>satir/2 && y_cent<sutun/2 %rgb obje 2. bölgede bulunuyorsa
                   if y_cent<sutun/2 %arac önce ileriye gidecek
                       writeDigitalPin(arduinouno,'D4',1);
                       writeDigitalPin(arduinouno,'D6',1);
                       writeDigitalPin(arduinouno,'D8',1);
                       writeDigitalPin(arduinouno,'D10',1);
                       set(handles.text2,'String','ileri');
                   end
                   if x_cent>satir/2 %arac saga dönecek
                       writeDigitalPin(arduinouno,'D4',1);
                       writeDigitalPin(arduinouno,'D6',1);
                       writeDigitalPin(arduinouno,'D9',1);
                       writeDigitalPin(arduinouno,'D11',1);
                       set(handles.text2,'String','saga dön.');
                   end
               end
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               if x_cent<satir/2 && y_cent>sutun/2 %rgb obje 3. bölgede bulunuyorsa
                   if y_cent>sutun/2 %arac geriye gidecek
                       writeDigitalPin(arduinouno,'D5',1);
                       writeDigitalPin(arduinouno,'D7',1);
                       writeDigitalPin(arduinouno,'D9',1);
                       writeDigitalPin(arduinouno,'D11',1);
                       set(handles.text2,'String','geri');
                   end
                   if x_cent<satir/2 %arac sola dönecek
                       writeDigitalPin(arduinouno,'D5',1);
                       writeDigitalPin(arduinouno,'D7',1);
                       writeDigitalPin(arduinouno,'D8',1);
                       writeDigitalPin(arduinouno,'D10',1);
                       set(handles.text2,'String','sola dön.');
                   end
               end
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               if x_cent>satir/2 && y_cent>sutun/2 %rgb obje 4. bölgede bulunuyorsa
                   if y_cent>sutun/2 %arac geriye gidecek
                       writeDigitalPin(arduinouno,'D5',1);
                       writeDigitalPin(arduinouno,'D7',1);
                       writeDigitalPin(arduinouno,'D9',1);
                       writeDigitalPin(arduinouno,'D11',1);
                       set(handles.text2,'String','geri');
                   end
                   if x_cent>satir/2 %arac saga dönecek
                       writeDigitalPin(arduinouno,'D4',1);
                       writeDigitalPin(arduinouno,'D6',1);
                       writeDigitalPin(arduinouno,'D9',1);
                       writeDigitalPin(arduinouno,'D11',1);
                       set(handles.text2,'String','saga dön.');
                   end
               end
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           end
           %AŞAGIDA ARACIN MOTOR BAGLANTILARINI GÖSTERDİM
           
          %%%%%%%%%%%%%%%%%%
          %                                                       %
          %%                                                    %%
          %% 1. SOL MOTOR                        %% 1. SAG MOTOR
          %% D4 İLERİ BAGLANTISI          %% D8 İLERİ BAGLANTISI
          %% D5 GERİ BAGLANTISI           %% D9 GERİ BAGLANTISI
          %%                                                     %%
          %%                                                     %%
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
           %                                                        %
          %%                                                      %%
          %% 2.SOL MOTOR                           %% 2. SOL MOTOR
          %% D6 İLERİ BAGLANTISI            %% D10 İLERİ BAGLANTISI
          %% D7 GERİ BAGLANTISI             %% D11 GERİ BAGLANTISI
          %%                                                      %%
          %%                                                      %%
           %                                                        %
           %%%%%%%%%%%%%%%%%%%
           
       end

    end

    % --- Executes on button press in pushbutton2.
    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)


    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)

    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    sira = get(hObject,'Value');
    global com;

    if sira==1
        com='COM5';
    elseif sira==2
        com='COM6';
    elseif sira==3
        com='COM7';
    end

    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called

    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end


    % --- Executes on button press in pushbutton3.
    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)
    global com;
    global arduinouno;
    arduinouno=arduino(com,'Uno');
    set(handles.text4,'String','Baglantı Kuruldu');

    % --- Executes on selection change in popupmenu4.
    function popupmenu4_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu4 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)

    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu4 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu4
    sira = get(hObject,'Value');
    global renk;

    if sira==1
        renk=1;
    elseif sira==2
        renk=2;
    elseif sira==3
        renk=3;
    end

    % --- Executes during object creation, after setting all properties.
    function popupmenu4_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu4 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called

    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end





  • YOUTUBE KANALIMI ZİYARET EDİN

    Youtube'da seslendirdiğim şiirleri paylaşıyorum. Youtube kanalıma da abone olursanız sevirim.

    Video Of Day

    ADRES

    Kağıthane/İstanbul

    EMAIL

    omersalihgul@gmail.com
    omersalihgul@hotmail.com