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> | ||
- | |||