MATLAB Language
Elaborazione delle immagini
Ricerca…
Immagine di base I / O
>> img = imread('football.jpg');
Usa imread
per leggere i file di immagine in una matrice in MATLAB.
Una volta che hai imread
un'immagine, questa viene archiviata come un ND-array in memoria:
>> size(img)
ans =
256 320 3
L'immagine 'football.jpg'
ha 256 righe e 320 colonne e ha 3 canali di colore: rosso, verde e blu.
Ora puoi specchiarlo:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
E infine, scriverlo come immagine usando imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
Recupera le immagini da Internet
Finché si dispone di una connessione Internet, è possibile leggere le immagini da un collegamento ipertestuale
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
Filtro usando un FFT 2D
Come per i segnali 1D, è possibile filtrare le immagini applicando una trasformazione di Fourier, moltiplicando con un filtro nel dominio della frequenza e trasformando nuovamente nel dominio spaziale. Ecco come applicare i filtri passa alto o passa basso a un'immagine con Matlab:
Lascia che l' image
sia l' image
originale non filtrata, ecco come calcolare la sua FFT 2D:
ft = fftshift(fft2(image));
Ora per escludere una parte dello spettro, è necessario impostare i suoi valori di pixel su 0. La frequenza spaziale contenuta nell'immagine originale viene mappata dal centro verso i bordi (dopo aver usato il fftshift
). Per escludere le basse frequenze, imposteremo l'area circolare centrale su 0.
Ecco come generare una maschera binaria a forma di disco con raggio D
usando la funzione incorporata:
[x y ~] = size(ft);
D = 20;
mask = fspecial('disk', D) == 0;
mask = imresize(padarray(mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);
Mascherare l'immagine del dominio della frequenza può essere fatto moltiplicando il punto FFT in base alla maschera binaria ottenuta sopra:
masked_ft = ft .* mask;
Ora calcoliamo la FFT inversa:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
Le alte frequenze in un'immagine sono i bordi taglienti, quindi questo filtro passa-alto può essere utilizzato per rendere più nitide le immagini.
Filtro delle immagini
Diciamo che hai un'immagine rgbImg
, ad esempio, leggi usando imread
.
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
Usa fspecial
per creare un filtro 2D:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Usa l' imfilter
per applicare il filtro sull'immagine:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
Proprietà di misurazione delle regioni collegate
A partire da un'immagine binaria, bwImg
, che contiene un numero di oggetti connessi.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
Per misurare le proprietà (ad es. Area, centroide, ecc.) Di ogni oggetto nell'immagine, utilizzare regionprops
:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
è un array struct che contiene una struttura per ogni oggetto nell'immagine. L'accesso a una proprietà misurata di un oggetto è semplice. Ad esempio, per visualizzare l'area del primo oggetto, semplicemente,
>> stats(1).Area
ans =
35
Visualizza i centroidi dell'oggetto sovrapponendoli sull'immagine originale.
>> figure, imshow(bwImg), title('Binary Image With Centroids Overlaid')
>> hold on
>> for i = 1:size(stats)
scatter(stats(i).Centroid(1), stats(i).Centroid(2), 'filled');
end