Documente Academic
Documente Profesional
Documente Cultură
, calcuarea valorii medii pe axa x
, 1
(1 ) a
k l j j
I a
, calcularea valorii medii pe axa y
- necesit operate suplimentar de finisare pentru eliminarea efectului de aliasing
Figura 3 - Operaie de downsampling biliniar
Prin efectuarea de operaii de upsampling, de regul, se dorete a se genera informaii
suplimentare. De exemplu: pentru o imagine se genereaz pixeli intermediari. Desigur, alt motiv
pentru upsampling este de a amesteca 2 semnale care au fost eantionate la frecvene diferite.
Operatori de upsampling
1. Decanting
Figura 4 - Decanting upsampling
6
2. Interpolare biliniar
Figura 5 - Upsampling bilinar
n implementarea prezentat n acest articol vom folosi operatorul de interpolare biliniar
pentru downsamling, respectiv upsampling.
Proiectul de fa a fost implementat folosind mediul de dezvoltare Microsoft Visual
Studio 2010, limbajul Visual C#. Pentru manipularea imaginilor am integrat biblioteca EmguCV
5
Interfaa grafic cu utilizatorul pentru subsistemul server, este prezentat n figura 6:
Figura 6 - Interfaa grafic cu utilizatorul pentru subsistemul server
Unde:
A: textbox-ul unde utilizatorul i introduce adresa IP a serverului (default este localhost);
B: textbox-ul unde utilizatorul introduce port-ul deschis pentru acceptarea pachetelor de la
client;
C: simulatorul latenei de reea, are un pas de incrementare de 2.5 %;
5
http://www.emgu.com/wiki/index.php/Main_Page
7
D: flag boolean pentru streaming-ul de date adaptiv, unde true = ON, false = OFF;
E: trimite ctre client stream-ul video preluat de la camera web.
La apsarea butonului Send Video Stream, se deschide un thread pentru conexiunea
socket (IP-ul este preluat din textbox-ul A, iar port-ul din textbox-ul B).
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ip), port);
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
Capturarea fiecrui frame de la camera web se face prin metoda EmguCV capture(). Ct
timp thread-ul este activ se execut iteraiile de downsampling i upsampling ale fiecrei imagini.
Iteraia 1
Imaginea original este captura de la webcam. Se encodeaz ca bitmap prin funcia
ToBitmap(). Imaginea downsampled are dimensiunile imaginii originale njumtite
(original.Width / 2, respectiv original.Height / 2), iar imaginea bitmap upsampled se
compune din imaginea downsampled avnd dimensiunile imaginii originale
(downsampled.Width * 2, respectiv downsampled.Height * 2). n final, imaginea cu
detaliile iteraiei 1 se compune apelnd metoda imgSub(original, upsampled):
private Bitmap imgSub(Bitmap bmp1, Bitmap bmp2)
{
Bitmap res = new Bitmap(bmp1.Width, bmp1.Height);
Emgu.CV.Image<Rgb, Byte> img1 = new Image<Rgb, byte>(bmp1);
Emgu.CV.Image<Rgb, Byte> img2 = new Image<Rgb, byte>(bmp2);
Emgu.CV.Image<Rgb, Byte> img3 = img1.Sub(img2);
res = img3.ToBitmap();
return res;
}
Iteraia 2
Imaginea original are dimensiunile njumtite ale capturii webcam-ului. La fel ca la
iteraia 1, se encodeaz ca bitmap. Imaginea downsampled are dimensiunile imaginii
originale njumtite (original.Width / 2, respectiv original.Height / 2, acest lucru
nseamn c este de 4 ori mai mic dect imaginea preluat de la webcam). Imaginea
upsampled se compune la fel ca la iteraia 1, iar detaliile imaginii iteraiei 2 se compune
prin metoda imgSub.
Iteraia 3
Se procedeaz la fel, rezultnd imaginea downsampled de 8 ori mai mic dect
imaginea original capturat de camera web.
n final, n funcie de parametrii setai de laten reea i streaming adaptiv, se trimit
imaginiile de detalii clientului pentru a fi ulterior procesate:
8
while (true)
{
sendImage(downsampled,0);
if (timeIsUp && adaptiveStreaming)
break;
sendImage(details3,0);
if (timeIsUp && adaptiveStreaming)
break;
sendImage(details2,0);
if (timeIsUp && adaptiveStreaming)
break;
sendImage(details1,0);
break;
}
sendImage(endframe,0);
Sfritul frame-ului este marcat de trimiterea unui bitmap de 1x1.
Pentru a avea o calitate ct mai bun a detaliilor se aplic algoritmul de compresie
Huffman
6
.
Subsistemul client este prezentat n figura 7:
Figura 7 - Interfaa grafic cu utilizatorul pentru subsistemul client
6
Data Compression using Huffman based LZW Encoding Technique - Md. Rubaiyat Hasan. International Journal of
Scientific & Engineering Research, Volume 2, Issue 11, November-2011 1 ISSN 2229-5518
9
Unde:
A: demareaz start-ul imaginilor de la webcam;
B: imaginea final rezultat din compunerea detaliilor primite de la server, care sunt
compresate Huffman;
C: filtrele pe care utilizatorul le poate aplica imaginii: blur, median, gaussian, bilateral,
binarizarea imaginii i detecia contururilor.
Aciunea declanat de apsarea butonului Start Video deschide socketul pentru
ascultarea pachetelor primite de la server.
Socket client = newsock.Accept();
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
Se aloc un obiect de tipul MemoryStream care conine secvenele de octei ce compun
imaginiile transmise de la server. Mai departe, se interpreteaz iteraiile 1 - 3, astfel nct dup
compunerea unei imagini de detaliu se testeaz dac s-a primit bitmap-ul de sfrit frame. n
cazul n care imaginile au fost compresate Huffman la server, acestea se decodific nainte de
afiare.
Filtrele sunt aplicate imaginilor de detaliu, ele fiind stocate n memorie sub forma unei
structuri de variabile booleene. La alegerea unui filtru de ctre utilizator, se fac verificri n timp
real n thread-ul pentru ascultarea pachetelor. De exemplu, dac s-a selectat filtrul de
smoothGaussian, imaginea de detaliu primit este trecut prin acest filtru i apoi afiat. Se
utilizeaz funcia filterBitmap:
private Bitmap filterBitmap(Image image)
{
Bitmap res = (Bitmap)image;
Emgu.CV.Image<Rgb, Byte> imgOriginal = new Image<Rgb, byte>(res);
...
if (filters.smoothGaussian)
{
imgOriginal = imgOriginal.SmoothGaussian(25);
}
res = imgOriginal.ToBitmap();
return res;
}
10
Rezultate experimentale
n cadrul experimentelor am folosit o camer web A4Tech PK-760E
7
ce are o rezoluie
senzor de 0.3 MP
8
, o rezoluie foto de 5 MP i o rezoluie video de 2560 x 2048. Modul de
conectare cu calculatorul se face prin USB. De asemenea, am folosit un desktop PC dotat cu un
procesor Intel Core2 Duo E8400 3 GHz, plac video HIS ATI Radeon HD4870 512MB DDR5
256-bit i 4GB RAM DDR2. Testele au fost fcute n reeaua local i simulnd o laten din ce
n ce mai mare.
Primul scenariu de test l-am fcut pentru a evalua performanele cadrelor transmise pe
secund (FPS) n cazul aplicrii algoritmului Huffman. Rezultatele se pot vedea n graficul din
figura 8:
Figura 8 - Performane n termeni FPS cu i fr compresie Huffman
Se observ c cele mai bune performane le-am avut atunci cnd nu exist laten n reea
(0 %), unde am obinut o medie de aproximativ 38 fps n transmiterea secvenelor de imagini
bitmap avnd compresie Huffman, respectiv 29 fps fr compresie.
Putem concluziona c s-a observat o cretere a cadrelor pe secund cu aproximativ 30%
n cazul aplicrii algoritmului Huffman asupa imaginilor de detaliu.
Al doilea scenariu de test l-am fcut prin obinerea unei evaluri subiective ale
performanei de recompunere ale imaginii finale la receptor. Am obinut evaluarea unui grup de 5
persoane (3 biei i 2 fete) cu vrste cuprinse ntre 24-26 de ani, asupra calitii imaginii finale.
7
http://www.emag.ro/camera-web-a4tech-pk-760e/pd/EL812BBBM/
8
MP abr. mega pixeli
11
Fiecare subiect a trebuit s dea o not de la 1 la 10 asupra calitii a 3 secvene video
rulnd ntre 20 i 30 de secunde cu factori perturbatori de la un nivel sczut la unul accentuat.
Rezultatele experimentale se pot vedea n tabelul 2:
Tabelul 2 - Evaluarea calitii imaginiilor finale de la receptor
Subiect Clip
Durat clip
(secunde)
Nivel perturbaii /
micare camer
Not subiect
Subiect #1
(biat)
Clip #1 30 sczut 10
Clip #2 25 mediu 10
Clip #3 20 ridicat 9
Subiect #2
(fat)
Clip #1 30 sczut 9
Clip #2 25 mediu 8
Clip #3 20 ridicat 8
Subiect #3
(fat)
Clip #1 30 sczut 10
Clip #2 25 mediu 10
Clip #3 20 ridicat 9
Subiect #4
(biat)
Clip #1 30 sczut 10
Clip #2 25 mediu 10
Clip #3 20 ridicat 10
Subiect #5
(biat)
Clip #1 30 sczut 9
Clip #2 25 mediu 8
Clip #3 20 ridicat 8
Subiecii au vizionat sevene video mai nti normale, fr aplicarea operaiilor de
upsampling - downsampling. Acest lucru a fost necesar pentru ca ei s se poat obinui cu
webcam-ul i pentru a obine un punctaj ct mai relevamt pentru evaluarea algoritmilor. Se
observ c avem un scor de 9.2 / 10 n cazul n care avem un nivel mediu de perturbaie al
camerei web i un scor de 8.8 / 10 n condiii ridicate de micare al camerei.
12
Ultimul scenariu de test l-am fcut prin aplicarea filtrelor asupra imaginiilor de detaliu la
decodor. Scopul acestui test a fost de a obine o cretere a calitii imaginii finale prin aplicarea
unui filtru de imagine. Cele mai bune rezultate le-am avut cu un filtru Gaussian:.
Figura 9 - n stnga: imagine din secvena video fr filtru, n dreapta: captur cu filtru Gaussian
Concluzii
Am prezentat o implementare a tehnicilor de downsampling - upsampling care ofer
oricrui utilizator o experien plcut i continu a secvenelor video transmise printr-o reea
instabil.
De asemenea, am reuit s eficientizm algoritmii de calcul astfel nct am obinut o
imagine final la decodor de o calitate foarte bun.
Compresia Huffman vine n sprijinul nostru pentru a crete viteza de transmitere a
secvenelor de imagine, astfel am mrit numrul de cadre transmise pe secund cu 30%.
Propuneri pentru viitor
n viitor, dorim s folosim algoritmi de Super-Resolution dup aplicarea operaiei de
upsampling, pentru a mbunti i mai mult calitatea imaginii.
Mai mult, vrem s oferim o variant a sistemului pentru aplicaii mobile.
13
Referine
[1] Downsampling of compressed images in the DCT domain - A. N. Skodras, C. A.
Christopoulos - Electronics Laboratory, University of Patras, GR-26110 Patras, Greece;
Computer Technology Institute, PO box 1122, GR-26110 Patras, Greece; Ericsson
Telecom AB, Compression Lab, TN/ETX/PN/XML, S-126 25 Stockholm, Sweden.
[2] MPEG Video Compositing in the Compressed Domain - Y. Noguchi, D. G.
Messerschmitt and S.-F. Chang - Proc. IEEE ISCAS-96, 1996.
[3] 2:1 Upsampling-downsampling image reconstruction system - Mihai Cristian
TNASE, Mihai ZAHARESCU, Associate Professor PhD Eng. Ion BUCUR -
Department of Computer Science and Engineering, Faculty of Automatic Control and
Computers Science University Politehnica of Bucharest, Splaiul Independenei 313,
Bucharest, 060042, Romania.
[4] Fast Algorithm for Computing Discrete Cosine Transform - C. W. Kok. IEEE Trans
on Signal Processing, Vol. 45, No. 3, pp. 757-760, Mar. 1997.
[5] Image and Video Compression Standards: Algorithms and Architectures - V.
Bhaskaran and K. Konstantinides - Second Edition, Kluwer Academic Publishers, 1997.
[6] Image Super-Resolution by Vectorizing Edges - Chia-Jung Hung, Chun-Kai Huang,
Bing-Yu Chen, National Taiwan University, 1999.
[7] Local Thresholding Image Binarization using Variable-Window Standard
Deviation Response - Costin-Anton Boiangiu, Alexandra Olteanu, Alexandru Victor
Stefanescu, Daniel Rosner, Alexandru Ionut Egner - Proceedings of the 21st
International DAAAM Symposium, 20-23 October 2010, Zadar, Croatia, pp. 133-134.
[8] Downsampling dependent upsampling of images - Tamas Frajka, Kenneth Zeger -
University of California, San Diego, Department of Electrical and Computer
Engineering, 9500 Gilman Dr, MC0407, La Jolla, CA 92093-0407, USA - 2 October
2003.
[9] Mastering OpenCV with Practical Computer Vision Projects - Daniel Llis Baggio,
Shervin Emami, David Milln Escriv, Khvedchenia Ievgen, Naureen Mahmood, Jasonl
Saragih, Roy Shilkrot. ISBN-10: 1849517827 - 3 Decembrie 2012.