This shows you the differences between two versions of the page.
|
ps:laboratoare:01 [2020/10/07 05:55] ionut.gorgos |
ps:laboratoare:01 [2020/10/07 18:49] (current) ionut.gorgos |
||
|---|---|---|---|
| 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 | ||
| Line 194: | Line 160: | ||
| 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. | 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> | ||
| - | <code matlab test_column_major> | ||
| - | clear all | ||
| - | |||
| - | N = 1000; | ||
| - | 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> | ||
| <hidden> | <hidden> | ||
| Line 238: | 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> | ||
| - | |||
| - | <hidden> | ||
| - | Intrebari individuale pentru studenti: | ||
| - | 1. Cum creez un vector in octave? | ||
| - | A: Folosesc paranteze drepte v = [1:3]; | ||
| - | 2. Cum salvez o variabila intr-un fisier? | ||
| - | A: save filename variabila | ||
| - | 3. Cum inmultesc doua matrice element cu element? | ||
| - | A: A .* B | ||
| - | 4. Ce functie pot folosi pentru a afla dimensiunile unei matrice / nr. linii / nr. coloane? | ||
| - | A: size(matrice) / size(matrice,1) / size(matrice,2) | ||
| - | 5. De la cat incepe indexarea in Octave? | ||
| - | A: De la 1 | ||
| - | 6. Cum pot calcula suma elementelor unui vector? | ||
| - | A: folosind functia sum sau adunand element cu element :) | ||
| - | 7. Ce face . inaintea unei operatii? | ||
| - | A: Aplica operatia element cu element | ||
| - | 8. Cum transformi o matrice de 3x3 intr-un vector 1x9? | ||
| - | A: matrice(:)' | ||
| - | 9. | ||
| - | </hidden> | ||
| - | |||