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

inserisci la descrizione dell'immagine qui

Usa fspecial per creare un filtro 2D:

>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')

inserisci la descrizione dell'immagine qui

Usa l' imfilter per applicare il filtro sull'immagine:

>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow