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