Perbaikan Kualitas Citra dalam Pengolahan Video
Perbaikan kualitas citra (Image Enhancement) merupakan salah satu tahapan dalam computer vision yang bersifat opsional.
Perbaikan kualitas citra bertujuan agar citra lebih mudah untuk diinterpretasi atau diolah dalam tahapan selanjutnya seperti segmentasi citra maupun ekstraksi ciri citra.
Metode perbaikan kualitas citra sangat beragam seperti operasi titik maupun operasi spasial yang dilakukan pada domain spasial maupun operasi transformasi yang dilakukan pada domain frekuensi.
Perbaikan kualitas citra bersifat heuristik dan eksperimentatif karena sesungguhnya tidak ada algoritma yang pasti dalam memperbaiki kualitas suatu citra.
Oleh sebab itu, bidang perbaikan kualitas citra sangat terbuka pada penemuan metode baru maupun pengembangan metode yang sudah ada.
Perbaikan kualitas citra dapat pula diaplikasikan dalam bidang pengolahan video (video processing). Hal ini karena sejatinya video adalah sekumpulan citra yang dijalankan secara sekuensial.
Secara garis besar, tahapan perbaikan kualitas citra dalam pengolahan video adalah sebagai berikut:
1. Membaca file video
2. Mengekstrak seluruh frame citra yang menyusun video
3. Melakukan operasi perbaikan kualitas citra pada setiap frame
4. Menyatukan kembali frame citra yang telah diperbaiki kualitasnya dan menjalankannya secara sekuensial dalam bentuk video.
Berikut ini merupakan contoh aplikasi pemrograman GUI Matlab untuk pengolahan video mengenai perbaikan kualitas citra pada domain spasial.
Operasi perbaikan kualitas citra yang dilakukan di antaranya adalah histogram equalization, intensity adjustment, dan gamma correction.
Selain itu, diberikan juga perintah mengenai pertukaran kanal warna pada ruang warna RGB (true color) dan visualisasi color map citra pada citra pseudo color.
3. Melakukan perbaikan kualitas citra dengan teknik histogram equalization
4. Melakukan perbaikan kualitas citra dengan teknik intensity adjustment
5. Melakukan perbaikan kualitas citra dengan teknik gamma correction
6. Menampilkan video dengan susunan kanal warna R-G-B (Video Asli)
7. Menampilkan video dengan susunan kanal warna R-B-G
8. Menampilkan video dengan susunan kanal warna G-R-B
9. Menampilkan video dengan susunan kanal warna G-B-R
10. Menampilkan video dengan susunan kanal warna B-R-G
11. Menampilkan video dengan susunan kanal warna B-G-R
12. Menampilkan video dengan warna semu ‘parula’
13. Menampilkan video dengan warna semu ‘winter’
Materi lebih lanjut mengenai pemrograman Matlab untuk perbaikan kualitas citra dapat dilihat pada halaman berikut:
- Konsep perbaikan kualitas citra digital
- Pemrograman GUI Matlab untuk perbaikan kualitas citra
- Perbaikan kualitas citra dalam computer vision
File source code lengkap beserta video mengenai perbaikan kualitas citra untuk pengolahan video dapat diperoleh melalui halaman berikut ini: Source Code
Sedangkan tampilan kodingnya adalah sebagai berikut:
function VideoProcessing2() global vid f = figure('Name','Video Processing','MenuBar','none',...    'ToolBar','none','NumberTitle','off','Position',[180 100 1000 600]); panel1 = uipanel('FontWeight','bold',...    'FontSize',10,'Position',[.06 .59 .2 .12]); panel2 = uipanel('FontWeight','bold',...    'FontSize',10,'Position',[.06 .48 .2 .12]); panel3 = uipanel('FontWeight','bold',...    'FontSize',10,'Position',[.06 .37 .2 .12]); panel4 = 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]); radio1 = uicontrol('Parent',panel1,'Style','radiobutton','String','Image Enhancement',...    'Position',[15 42 120 20],'Callback', @radiobutton1,'Value',1); radio2 = uicontrol('Parent',panel2,'Style','radiobutton','String','True Color',...    'Position',[15 42 90 20],'Callback', @radiobutton2,'Value',0); radio3 = uicontrol('Parent',panel3,'Style','radiobutton','String','Pseudo Color',...    'Position',[15 42 90 20],'Callback', @radiobutton3,'Value',0); edit1 = uicontrol('Style','edit','String','',...    'Position',[130 442 130 20],'Enable','inactive'); popup1 = uicontrol('Parent',panel1,'Style','popupmenu',...    'String',{'Histogram Equalization','Intensity Adjustment','Gamma Correction'},...    'Position',[15 16 150 20],'Enable','on'); popup2 = uicontrol('Parent',panel2,'Style','popupmenu',...    'String',{'rgb','rbg','grb','gbr','brg','bgr'},...    'Position',[15 16 150 20],'Enable','off'); popup3 = uicontrol('Parent',panel3,'Style','popupmenu',...    'String',{'parula','jet','hsv','hot','cool','spring','summer',...    'autumn','winter','gray','bone','copper','pink'},...    'Position',[15 16 150 20],'Enable','off'); ax1 = axes('Parent',panel4,'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                val = get(popup1,'Value');                switch val                    case 1                        R = histeq(R);                        G = histeq(G);                        B = histeq(B);                        frame = cat(3,R,G,B);                    case 2                        R = imadjust(R);                        G = imadjust(G);                        B = imadjust(B);                        frame = cat(3,R,G,B);                    case 3                        hgamma = vision.GammaCorrector(2.2,...                            'Correction','De-gamma');                        frame = step(hgamma, frame);                end            elseif get(radio2,'Value') == 1                val = get(popup2,'Value');                switch val                    case 1                        frame = cat(3,R,G,B);                    case 2                        frame = cat(3,R,B,G);                    case 3                        frame = cat(3,G,R,B);                    case 4                        frame = cat(3,G,B,R);                    case 5                        frame = cat(3,B,R,G);                    case 6                        frame = cat(3,B,G,R);                end            elseif get(radio3,'Value') == 1                val = get(popup3,'Value');                frame = (R+G+B)/3;                switch val                    case 1                        colormap parula                    case 2                        colormap jet                    case 3                        colormap hsv                    case 4                        colormap hot                    case 5                        colormap cool                    case 6                        colormap spring                    case 7                        colormap summer                    case 8                        colormap autumn                    case 9                        colormap winter                    case 10                        colormap gray                    case 11                        colormap bone                    case 12                        colormap copper                    case 13                        colormap pink                end            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(popup1,'Enable','on')        set(radio2,'Value',0)        set(popup2,'Enable','off')        set(radio3,'Value',0)        set(popup3,'Enable','off')    end    function radiobutton2(~,~)        set(radio1,'Value',0)        set(popup1,'Enable','off')        set(radio2,'Value',1)        set(popup2,'Enable','on')        set(radio3,'Value',0)        set(popup3,'Enable','off')    end    function radiobutton3(~,~)        set(radio1,'Value',0)        set(popup1,'Enable','off')        set(radio2,'Value',0)        set(popup2,'Enable','off')        set(radio3,'Value',1)        set(popup3,'Enable','on')    end end
Posted on June 20, 2016, in Pengolahan Video and tagged cara membuat video processing matlab, cara mengolah video menggunakan matlab, contoh aplikasi video digital menggunakan matlab, contoh image enhancement matlab, contoh video processing menggunakan matlab, contrast enhancement, image enhancement menggunakan matlab, pengolahan video menggunakan matlab, perbaikan intensitas citra matlab, perbaikan kontras citra matlab, perbaikan kualitas citra matlab, perbaikan kualitas citra menggunakan matlab, perbaikan kualitas citra untuk video processing matlab, video processing, video processing dengan gui matlab, video processing matlab, video processing menggunakan matlab, video processing sederhana menggunakan matlab. Bookmark the permalink. Leave a comment.
Leave a comment
Comments 0