MATLAB Language
Traitement d'image
Recherche…
Image de base I / O
>> img = imread('football.jpg');
Utilisez imread
pour lire les fichiers image dans une matrice dans MATLAB.
Une fois que vous imread
une image, celle-ci est stockée dans un tableau ND en mémoire:
>> size(img)
ans =
256 320 3
L'image 'football.jpg'
comporte 256 lignes et 320 colonnes et comporte 3 canaux de couleur: rouge, vert et bleu.
Vous pouvez maintenant le refléter:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
Et enfin, écrivez-le en tant qu'image en utilisant imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
Récupérer des images sur Internet
Tant que vous avez une connexion Internet, vous pouvez lire les images d'un lien hypertexte
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
Filtrage à l'aide d'une FFT 2D
Comme pour les signaux 1D, il est possible de filtrer les images en appliquant une transformation de Fourier, en multipliant avec un filtre dans le domaine fréquentiel et en transformant à nouveau le domaine spatial. Voici comment appliquer des filtres passe-haut ou passe-bas à une image avec Matlab:
Soit l' image
l' image
originale non filtrée, voici comment calculer son FFT 2D:
ft = fftshift(fft2(image));
Maintenant, pour exclure une partie du spectre, il faut définir ses valeurs de pixel sur 0. La fréquence spatiale contenue dans l'image d'origine est mappée du centre vers les bords (après avoir utilisé fftshift
). Pour exclure les basses fréquences, nous allons définir la zone circulaire centrale sur 0.
Voici comment générer un masque binaire en forme de disque de rayon D
utilisant la fonction intégrée:
[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]);
Le masquage de l'image dans le domaine fréquentiel peut être effectué en multipliant le FFT au niveau du point par le masque binaire obtenu ci-dessus:
masked_ft = ft .* mask;
Maintenant, calculons l'inverse FFT:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
Les hautes fréquences d'une image sont les arêtes vives, ce filtre passe-haut peut donc être utilisé pour affiner les images.
Filtrage d'image
Disons que vous avez une image rgbImg
, par exemple, lisez en utilisant imread
.
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
Utilisez fspecial
pour créer un filtre 2D:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Utilisez imfilter
pour appliquer le filtre sur l'image:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
Propriétés de mesure des régions connectées
À partir d'une image binaire, bwImg
, qui contient un certain nombre d'objets connectés.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
Pour mesurer les propriétés (par exemple, la surface, le centroïde, etc.) de chaque objet de l'image, utilisez les regionprops
:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
est un tableau struct qui contient une structure pour chaque objet de l'image. L'accès à une propriété mesurée d'un objet est simple. Par exemple, pour afficher la zone du premier objet, simplement,
>> stats(1).Area
ans =
35
Visualisez les centroïdes d'objet en les superposant sur l'image d'origine.
>> 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