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