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 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
1

2. Membuka file video yang ingin diolah
2

3. Menjalankan video RGB
3

4. Menjalankan video kanal merah
4

5. Menjalankan video kanal hijau
5

6. Menjalankan video kanal biru
6

7. Menjalankan video dengan efek sepia
7

8. Menjalankan video grayscale
8

9. Menjalankan video biner
9

Source code dan video pada pengolahan di atas dapat diunduh pada laman 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. Leave a comment.

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: