|
Matlab per l'elaborazione delle immagini digitali: generare un'immagine 'sintetica' con figure e salvarla su disco
In questo articolo mostrerò come creare, in Matlab, un'immagine 'sintetica', partendo da una matrice, con figure geometriche posizionate casualmente all'interno della stessa, per poi salvare il tutto su disco.
Le figure geometriche verranno create con delle matrici (per creare il triangolo, verrà creato un quadrato e, dopo, sarà necessario utilizzare due cicli for annidati per mettere a 0 la parte 'complementare' a quella del triangolo vero e proprio).
Le coordinate dei vertici-origine delle figure (i vertici 'in alto a sinistra') verranno generate con la funzione rand, mantenendo comunque i valori all'interno dell'area di lavoro (che poi equivale alla dimensione, in pixel, dell'immagine finale, per intenderci).
Lo script mostra a video l'immagine e la salva su disco, con nome file 'output.jpg'; attenzione: se nella cartella di lavoro è presente un file 'output.jpg', questo script lo sovrascriverà senza avvisarvi (nè prima nè dopo) !!!
Questo articolo sta alla base di quello dedicato alla creazione e al salvataggio su disco di FILMATI 'sintetici' (creati interamente in Matlab, mediante matrici, senza dati in input), che pubblicherò a breve su questo stesso sito; in quel caso, comunque, non avremo a che fare con immagini ma con FRAMES, come vedremo.
Per alcuni comandi di manipolazione delle immagini in forma di matrici (size, cicli for, uint8, ...) si rimanda all'articolo, pubblicato precedentemente, sulle basi dell'elaborazione delle immagini digitali mediante Matlab.
Ecco lo script:
% Impostazioni iniziali: dimensioni (M per l'altezza, N per la larghezza) in pixel dell'area di lavoro-immagine di output e 'disegno' delle figure geometriche (un rettangolo e un triangolo) clear; M = 160; N = 160; areaLavoro = zeros(M,N,3); % Figure a 3 dimensioni (RGB) rettangolo = ones(15,10,3); triangolo = ones(10,10,3); for i=1:10 for j = (i+1):10 triangolo(i,j,:)=0; end; end; % Genero le coordinate iniziali dei vertici in alto a sinistra delle figure per posizionarle nell'area di lavoro posInizialeTriangoloX = floor(rand(1) * M); posInizialeTriangoloY = floor(rand(1) * N); posInizialeRettangoloX = floor(rand(1) * M); posInizialeRettangoloY = floor(rand(1) * N); % Disegno il triangolo e il rettangolo nell'area di lavoro for i=1:10 for j= 1:10 areaLavoro(posInizialeTriangoloX + i, posInizialeTriangoloY + j) = triangolo(i,j); % Posiziono il triangolo nell'area di lavoro end; end; for i=1:15 for j= 1:10 areaLavoro(posInizialeRettangoloX + i, posInizialeRettangoloY + j) = rettangolo(i,j); % Posiziono il rettangolo nell'area di lavoro end; end; % Mostro a video l'immagine e la salvo su disco, nome file: 'output.jpg' imshow(areaLavoro); imwrite(areaLavoro, 'output.jpg', 'jpg');
Bye !
|