Zoeken…


Basisafbeelding I / O

>> img = imread('football.jpg');

Gebruik imread om afbeeldingsbestanden in een matrix in MATLAB te lezen.
Nadat u een afbeelding hebt imread , wordt deze opgeslagen als een ND-array in het geheugen:

>> size(img)
ans =
 256   320     3

De afbeelding 'football.jpg' heeft 256 rijen en 320 kolommen en heeft 3 kleurkanalen: rood, groen en blauw.

Je kunt het nu spiegelen:

>> mirrored = img(:, end:-1:1, :);  %// like mirroring any ND-array in Matlab

En ten slotte, schrijf het terug als een afbeelding met imwrite :

>> imwrite(mirrored, 'mirrored_football.jpg');

Afbeeldingen ophalen van internet

Zolang u een internetverbinding hebt, kunt u afbeeldingen van een hyperlink lezen

I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');

Filteren met een 2D FFT

Net als voor 1D-signalen, is het mogelijk om afbeeldingen te filteren door een Fourier-transformatie toe te passen, te vermenigvuldigen met een filter in het frequentiedomein en terug te transformeren naar het ruimtedomein. Hier ziet u hoe u hoog- of laagdoorlaatfilters kunt toepassen op een afbeelding met Matlab:

Laat image de originele, ongefilterde afbeelding zijn, hier is hoe de 2D FFT te berekenen:

ft = fftshift(fft2(image));

Om een deel van het spectrum uit te sluiten, moet je de pixelwaarden op 0 zetten. De ruimtelijke frequentie in het oorspronkelijke beeld wordt vanuit het midden naar de randen toegewezen (na gebruik van fftshift ). Om de lage frequenties uit te sluiten, stellen we het centrale cirkelvormige gebied in op 0.

U kunt als volgt een schijfvormig binair masker met straal D genereren met de ingebouwde functie:

[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]);

Het maskeren van het frequentiedomeinbeeld kan worden gedaan door de FFT puntsgewijs te vermenigvuldigen met het hierboven verkregen binaire masker:

masked_ft = ft .* mask;

Laten we nu de inverse FFT berekenen:

filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');

De hoge frequenties in een afbeelding zijn de scherpe randen, dus dit high-pass filter kan worden gebruikt om afbeeldingen te verscherpen.

Afbeelding filteren

Laten we zeggen dat u een afbeelding rgbImg bijvoorbeeld is ingelezen met imread .

>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')

voer hier de afbeeldingsbeschrijving in

Gebruik fspecial om een 2D-filter te maken:

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

voer hier de afbeeldingsbeschrijving in

Gebruik imfilter om het filter op de afbeelding toe te passen:

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

voer hier de afbeeldingsbeschrijving in

Eigenschappen van verbonden regio's meten

Beginnend met een binaire afbeelding, bwImg , die een aantal verbonden objecten bevat.

>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')

voer hier de afbeeldingsbeschrijving in

Gebruik regionprops om eigenschappen (bijvoorbeeld gebied, zwaartepunt, enz.) Van elk object in de afbeelding te meten:

>> stats = regionprops(bwImg, 'Area', 'Centroid');

stats is een struct-array die een struct bevat voor elk object in de afbeelding. Toegang tot een gemeten eigenschap van een object is eenvoudig. Als u bijvoorbeeld het gebied van het eerste object wilt weergeven,

>> stats(1).Area

ans =

    35

Visualiseer de centroïden van het object door ze op de oorspronkelijke afbeelding te leggen.

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

voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow