Cara menampilkan video pada GUI Matlab


Pengolahan video merupakan cabang ilmu yang merupakan bagian dari bidang sistem visi komputer (computer vision).

Video sejatinya merupakan sekumpulan citra yang dijalankan secara sekuensial dengan frame rate tertentu.

Pada umumnya pengolahan video dilakukan dengan langkah-langkah berikut:
1. Membaca file video asli
2. Mengekstrak setiap frame video
3. Mengolah setiap frame tersebut dengan metode dan tujuan tertentu
4. Menampilkan kembali hasil pengolahan frame citra secara sekuensial dalam bentuk video

Pengolahan video telah banyak dilakukan dan dikembangkan oleh para saintis di dunia karena perannya yang cukup besar dalam perkembangan teknologi.

Dalam bidang computer vision, kamera telah banyak dimanfaatkan untuk menggantikan maupun membantu peran mata manusia untuk mengawasi, mendeteksi, ataupun mengenali suatu obyek dalam video baik secara real-time maupun non real-time.

Oleh sebab itu, perkembangan ilmu pengetahuan khususnya pada bidang pengolahan citra digital dan pengolahan video terus menerus dilakukan.

Berikut ini merupakan contoh aplikasi pemrograman GUI Matlab mengenai pengolahan video sederhana di antaranya adalah untuk mengekstrak kanal warna citra RGB, mengkonversi ruang warna RGB menjadi grayscale, mengkonversi tone warna sepia, dan mengkonversi warna citra menjadi biner.

Format video yang dapat dibaca oleh Matlab di antaranya adalah .avi, .mpg, dan .mp4.

Tahapan pemrograman untuk pengolahan video adalah sebagai berikut:

1. Menampilkan GUI Matlab

2. Membuka file video yang ingin diolah

3. Menjalankan video RGB

4. Menjalankan video kanal merah

5. Menjalankan video kanal hijau

6. Menjalankan video kanal biru

7. Menjalankan video dengan efek sepia

8. Menjalankan video grayscale

9. Menjalankan video biner

File source code lengkap beserta video pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Sedangkan tampilan kodingnya adalah sebagai berikut:

function VideoProcessing()

global vid

f = figure('Name','Video Processing','MenuBar','none',...
    'ToolBar','none','NumberTitle','off','Position',[180 100 1000 600]);
panel1 = uipanel('Title','Panel','FontWeight','bold',...
    'FontSize',10,'Position',[.06 .37 .2 .35]);
panel2 = uipanel('Title','Video','FontWeight','bold',...
    'FontSize',10,'Position',[.35 .3 .55 .55]);

btn1 = uicontrol('Parent',f,'Style', 'pushbutton', 'String', 'Browse Video',...
    'Position', [60 480 100 25],'Callback', @pushbutton1);
btn2 = uicontrol('Parent',f,'Style', 'pushbutton', 'String', 'Play',...
    'Position', [60 180 100 25],'Callback', @pushbutton2,'Enable','off');

htext = uicontrol('Style','text','String','Video Name:',...
    'Position',[60 440 70 20]);

edit1 = uicontrol('Style','edit','String','',...
    'Position',[130 442 130 20],'Enable','inactive');

radio1 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Original (RGB)','Position',[15 160 100 20],...
    'Callback', @radiobutton1,'Value',1);
radio2 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Red Channel','Position',[15 135 100 20],...
    'Callback', @radiobutton2);
radio3 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Green Channel','Position',[15 110 100 20],...
    'Callback', @radiobutton3);
radio4 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Blue Channel','Position',[15 85 100 20],...
    'Callback', @radiobutton4);
radio5 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Sepia','Position',[15 60 100 20],...
    'Callback', @radiobutton5);
radio6 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Grayscale','Position',[15 35 100 20],...
    'Callback', @radiobutton6);
radio7 = uicontrol('Parent',panel1,'Style','radiobutton',...
    'String','Binary','Position',[15 10 100 20],...
    'Callback', @radiobutton7);

ax1 = axes('Parent',panel2,'Position',[.002 .015 1 1],'XTick',[],...
    'YTick',[],'Visible','off');

    function pushbutton1(~,~)
        [filename,pathname] = uigetfile('*.*');
        if ~isequal(filename,0);
            vid = fullfile(pathname,filename);
            set(edit1,'String',filename)
            set(btn2,'Enable','on')
        else
            return;
        end
    end

    function pushbutton2(~,~)
        obj.reader = vision.VideoFileReader(vid);
        
        while ~isDone(obj.reader)
            [frame,frameSize] = readFrame();
            frame = im2uint8(frame);
            showFrameOnAxis(ax1,frame)
        end
        
        release(obj.reader);
        
        function [frame,frameSize] = readFrame()
            frame = obj.reader.step();
            R = frame(:,:,1);
            G = frame(:,:,2);
            B = frame(:,:,3);
            
            if get(radio1,'Value') == 1
                frame = obj.reader.step();
            elseif get(radio2,'Value') == 1
                frame = cat(3,R,G*0,B*0);
            elseif get(radio3,'Value') == 1
                frame = cat(3,R*0,G,B*0);
            elseif get(radio4,'Value') == 1
                frame = cat(3,R*0,G*0,B);
            elseif get(radio5,'Value') == 1
                r = .393*R + .769*G + .189*B;
                g = .349*R + .686*G + .168*B;
                b = .272*R + .534*G + .131*B;
                frame = cat(3,r,g,b);
            elseif get(radio6,'Value') == 1
                gray = (R+G+B)/3;
                frame = cat(3,gray,gray,gray);
            elseif get(radio7,'Value') == 1
                gray = (R+G+B)/3;
                bw = ~im2bw(gray);
                frame = cat(3,bw,bw,bw);
            end
            
            frameSize = size(frame);
        end
        
        function showFrameOnAxis(hAxis,~)
            try
                hChild = get(hAxis, 'Children');
            catch %#ok<CTCH>
                return; % hAxis does not exist; nothing to draw
            end
            
            isFirstTime = isempty(hChild);
            if isFirstTime
                hIm = displayImage(hAxis, frame);
                addScrollPanel(hAxis, hIm);
            else
                hIm = hChild;
                try
                    set(hIm,'cdata',frame); drawnow;
                catch %#ok<CTCH>
                    % figure closed
                    return;
                end
            end
        end
        
        function addScrollPanel(hAxis, hIm)
            hPanel = get(hAxis,'parent');
            pos = get(hAxis,'position');
            
            hSP = imscrollpanel(hPanel,hIm);
            set(hSP,'Units','normalized', 'Position',pos);
        end
        %--------------------------------------------------------------------------
        function hIm = displayImage(hAxis, ~)
            xdata = [1 frameSize(2)];
            ydata = [1 frameSize(1)];
            cdata = frame;
            cdatamapping = 'direct';
            
            % hIm = image(xdata,ydata,cdata, ...
            % 'BusyAction', 'cancel', ...
            % 'Parent', hAxis, ...
            % 'CDataMapping', cdatamapping, ...
            % 'Interruptible', 'off');
            
            hIm = image(cdata, ...
                'BusyAction', 'cancel', ...
                'Parent', hAxis, ...
                'CDataMapping', cdatamapping, ...
                'Interruptible', 'off');
            
            set(hAxis, ...
                'YDir','reverse',...
                'TickDir', 'out', ...
                'XGrid', 'off', ...
                'YGrid', 'off', ...
                'PlotBoxAspectRatioMode', 'auto', ...
                'Visible', 'off');
        end
    end

    function radiobutton1(~,~)
        set(radio1,'Value',1)
        set(radio2,'Value',0)
        set(radio3,'Value',0)
        set(radio4,'Value',0)
        set(radio5,'Value',0)
        set(radio6,'Value',0)
        set(radio7,'Value',0)
    end

    function radiobutton2(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',1)
        set(radio3,'Value',0)
        set(radio4,'Value',0)
        set(radio5,'Value',0)
        set(radio6,'Value',0)
        set(radio7,'Value',0)
    end

    function radiobutton3(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',0)
        set(radio3,'Value',1)
        set(radio4,'Value',0)
        set(radio5,'Value',0)
        set(radio6,'Value',0)
        set(radio7,'Value',0)
    end

    function radiobutton4(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',0)
        set(radio3,'Value',0)
        set(radio4,'Value',1)
        set(radio5,'Value',0)
        set(radio6,'Value',0)
        set(radio7,'Value',0)
    end

    function radiobutton5(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',0)
        set(radio3,'Value',0)
        set(radio4,'Value',0)
        set(radio5,'Value',1)
        set(radio6,'Value',0)
        set(radio7,'Value',0)
    end

    function radiobutton6(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',0)
        set(radio3,'Value',0)
        set(radio4,'Value',0)
        set(radio5,'Value',0)
        set(radio6,'Value',1)
        set(radio7,'Value',0)
    end

    function radiobutton7(~,~)
        set(radio1,'Value',0)
        set(radio2,'Value',0)
        set(radio3,'Value',0)
        set(radio4,'Value',0)
        set(radio5,'Value',0)
        set(radio6,'Value',0)
        set(radio7,'Value',1)
    end
end

Save

Save

Save

Save

Save

Save

Save

Posted on June 20, 2016, in Pengolahan Video and tagged , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 16 Comments.

  1. Assalamualikum mas, kira2 ada ga ya coding untuk menampilkan video real time menggunakan matlab yang terhubung dengan kamera? yang digunakan untuk pengenalan objek. jika ada, seperti apa ya mas?

    Terimakasih mas atas jawabannya

  2. apa dari situ nanti kita bisa gunakan untuk keperluan deteksi objek secara realtime mas?

  3. kalo ketika video berjalan apakah bisa ditambahkan untuk mengcapture video tersebut?terima kasih

  4. codingnya seperti gimana ya mas, tolong mas ajarin saya kalo bisa. saya sudah mencari tapi gak ketemu

  5. ardhika ryzha

    tolong ya mas ardhika.ryzha37@gmail.com terima kasih mas

  6. Assalamu’alaikum mas, kodingan ini minimal memakai matlab versi brp ya?

  7. Assalamu’alaikum mas, kalau kita mau menampilkan video di axes yang telah kita desain itu bagimana caranya…… mas tolong beri codenya tentang video untuk tampilkan axes yang telah didesain

  8. Assalamualaikum. Untuk dapetin video aslinya itu darimana ya?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: