Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ps:laboratoare:01 [2020/10/06 10:31]
darius.necula
ps:laboratoare:01 [2020/10/07 18:49] (current)
ionut.gorgos
Line 3: Line 3:
 În acest laborator ne vom obișnui cu OCTAVE și vom face câteva procesări de semnal simple. Majoritatea tehnicilor de procesare de semnal pot fi executate ca operații pe vectori și matrici, deci OCTAVE este o unealtă foarte folositoare pentru a face aceste operații. În acest laborator ne vom obișnui cu OCTAVE și vom face câteva procesări de semnal simple. Majoritatea tehnicilor de procesare de semnal pot fi executate ca operații pe vectori și matrici, deci OCTAVE este o unealtă foarte folositoare pentru a face aceste operații.
  
-Pentru acest laborator s-a avut ca referință tutorialul (acum am trecut la Octave) [[http://​uk.mathworks.com/​help/​pdf_doc/​matlab/​getstart.pdf?​s_tid=int_tut ​| de aici]]+Pentru acest laborator s-a avut ca referință tutorialul (acum am trecut la Octave) [[https://​web.archive.org/​web/​20180417185102/​http://​uk.mathworks.com/​help/​pdf_doc/​matlab/​getstart.pdf | de aici]]
  
 Octave poate fi downloadat de aici: [[https://​www.gnu.org/​software/​octave/​download.html | Octave]] Octave poate fi downloadat de aici: [[https://​www.gnu.org/​software/​octave/​download.html | Octave]]
Line 138: Line 138:
  
 /* Make it hidden before lab, unhide afterwards */ /* Make it hidden before lab, unhide afterwards */
-<​hidden>​ 
-Un exemplu de cod este acesta: 
-<code matlab basic_dsp.m>​ 
-close all; 
-f1 = 1; 
-f2 = 2; 
-x = 0:0.01:1; 
-s1 = sin(2*pi*f1*x);​ 
-s2 = sin(2*pi*f2*x);​ 
-h1 = figure; 
-plot(x, [s1; s2]); 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-title('​Two sinewaves'​);​ 
-legend('​1 Hz', '2 Hz'); 
-h2 = figure; 
-c = s1 + s2; 
-plot(x, c); 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-title('​Sum of the two sinewaves'​);​ 
-print(h1, '​-dpng',​ '​sine1.png'​);​ 
-print(h2, '​-dpng',​ '​sine2.png'​);​ 
-</​code>​ 
-</​hidden>​ 
- 
  
-  ​ 
 12. O aplicație ușoară 12. O aplicație ușoară
  
Line 182: Line 155:
 Rețineți că o matrice imagine conține numai valori de la 0 la 255. Rețineți că o matrice imagine conține numai valori de la 0 la 255.
  
-<​hidden>​ 
-Un exemplu de cod este acesta: 
-<code matlab> 
-II = IR - R1*0.3 - R2*0.3; 
-image(II) 
-</​code>​ 
-</​hidden>​ 
  
 13. Column major 13. Column major
  
-OCTAVE stochează datele în ordine pe coloane (column major). Pentru a testa asta încercați să înmulțiți element cu element două matrici mari (N = 5000) folosind 2 for-uri. Parcurgeți matricea pe rânduri, iar apoi pe coloane. Pentru a măsura timpul puneți funcția '​tic'​ înainte, iar funcția '​toc'​ după blocul de cod pe care doriți să îl măsurați. De asemenea, calculați înmulțirea folosind operatorul '​.*'​. Observați diferențele de timp. +OCTAVE stochează datele în ordine pe coloane (column major). Pentru a testa asta încercați să înmulțiți element cu element două matrici mari (N = 1000) folosind 2 for-uri. Parcurgeți matricea pe rânduri, iar apoi pe coloane. Pentru a măsura timpul puneți funcția '​tic'​ înainte, iar funcția '​toc'​ după blocul de cod pe care doriți să îl măsurați. De asemenea, calculați înmulțirea folosind operatorul '​.*'​. Observați diferențele de timp.  
  
 <​hidden>​ <​hidden>​
-<code matlab test_column_major>​ 
-clear all 
- 
-N = 5000; 
-A = rand(N); 
-B = rand(N); 
-C = zeros(N); 
- 
-tic  
-for i = 1:size(A,1) 
-    for j = 1:size(A,2) 
-        C(i,j) = A(i,j) * B(i,j); 
-    end 
-end 
-time_row = toc 
- 
-tic  
-for j = 1:size(A,2) 
-    for i = 1:size(A,1) 
-        C(i,j) = A(i,j) * B(i,j); 
-    end 
-end 
-time_column = toc 
- 
-tic 
-C = A .* B; 
-time_matrix_operation = toc 
- 
-</​code>​ 
-</​hidden>​ 
- 
 14. BONUS: In fișierul următor aveți o imagine ({{:​ps:​laboratoare:​noisy_img.mat|noisy_img.mat}}) care a fost alterată cu zgomot, valorile unor pixeli devenind foarte mari, 14. BONUS: In fișierul următor aveți o imagine ({{:​ps:​laboratoare:​noisy_img.mat|noisy_img.mat}}) care a fost alterată cu zgomot, valorile unor pixeli devenind foarte mari,
  și ale altora foarte mici. Important este ca pixelii cu zgomot apar destul de rar. Încercați să refaceți imaginea originală. Imaginea e reprezentată ca o matrice cu valori in [0,1] și o vom afișa cu functia imshow(noise_img).  și ale altora foarte mici. Important este ca pixelii cu zgomot apar destul de rar. Încercați să refaceți imaginea originală. Imaginea e reprezentată ca o matrice cu valori in [0,1] și o vom afișa cu functia imshow(noise_img).
- 
-<​hidden>​ 
  
 Ideea acestui exercițiu este că zgomotul este rar, asa că in proximitatea unui pixel alterat este șansă mică să existe alt pixel alterat. Asa ca vom Înlocui acel pixel cu o valoare care depinde de pixelii din jurul sau, de exemplu dintr-o zonă de 3x3 pixeli centrată în el.  Ideea acestui exercițiu este că zgomotul este rar, asa că in proximitatea unui pixel alterat este șansă mică să existe alt pixel alterat. Asa ca vom Înlocui acel pixel cu o valoare care depinde de pixelii din jurul sau, de exemplu dintr-o zonă de 3x3 pixeli centrată în el. 
Line 239: Line 173:
 Observație pentru asistenți: acest tip de zgomot se numeste salt and pepper. Studentii vor ajunge repede la soluția cu median filter: Observație pentru asistenți: acest tip de zgomot se numeste salt and pepper. Studentii vor ajunge repede la soluția cu median filter:
 https://​www.mathworks.com/​help/​images/​noise-removal.html. De recomandat ca punctarea sa se faca doar in cazul implementarilor proprii. https://​www.mathworks.com/​help/​images/​noise-removal.html. De recomandat ca punctarea sa se faca doar in cazul implementarilor proprii.
- 
- 
- 
- 
-<code matlab '​sinewaves.m'>​ 
-clear all 
-close all 
-% incarc imaginea, transform in gri 
-% redimensionez valoarea pixelilor in intervalul [0,1] 
-img = imread('​lab02-city-vision2.jpg'​);​ 
-gray = imresize(img,​0.2);​ 
-gray = double(gray(:,:,​1)) / 255; 
- 
-% calculez matrice de zgomot random uniform 
-noise = rand(size(gray));​ 
-th1 = 0.987; 
-th2 = 0.013; 
-% selectez pixelii care vor fii alterati 
-salt = double(noise > 0.987) ; 
-pepper = double(noise < 0.007); 
- 
-% adaug zgomot alb(salt) dand valori foarte mari unor pixeli 
-% adaug zgomot negru(pepper) dand valori foarte mici unor pixeli 
-noisy_img = noisy_img .* salt .* th1  + (1-salt) .* gray; 
-noisy_img = noisy_img .* pepper * th2 .* noise + (1-pepper) .* noisy_img; 
- 
-figure , imshow(noisy_img);​ 
-title('​Noisy Image'​) 
- 
-filtered_img = medfilt2(noisy_img);​ 
-figure , imshow(filtered_img);​ 
-title('​Filtered Image'​) 
- 
-save('​noisy_img',​ '​noisy_img'​) 
- 
-</​code>​ 
 </​hidden>​ </​hidden>​
- 
- 
- 
  
ps/laboratoare/01.1601969504.txt.gz · Last modified: 2020/10/06 10:31 by darius.necula
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0