Sök…


Grundbild I / O

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

Använd imread att läsa bildfiler till en matris i MATLAB.
När du har imread en bild lagras den som en ND-matris i minnet:

>> size(img)
ans =
 256   320     3

Bilden 'football.jpg' har 256 rader och 320 kolumner och har 3 färgkanaler: Röd, grön och blå.

Du kan nu spegla det:

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

Och slutligen, skriv tillbaka den som en bild med imwrite :

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

Hämta bilder från Internet

Så länge du har en internetanslutning kan du läsa bilder från en hyperlänk

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

Filtrering med hjälp av en 2D FFT

Liksom för 1D-signaler är det möjligt att filtrera bilder genom att använda en Fourier-transformation, multiplicera med ett filter i frekvensdomänen och omvandla tillbaka till rymddomänen. Så här kan du använda hög- eller lågpassfilter på en bild med Matlab:

Låt image vara den ursprungliga, ofiltrerade bilden. Så här beräknar du sin 2D FFT:

ft = fftshift(fft2(image));

För att utesluta en del av spektrumet måste man ställa in sina pixelvärden på 0. Den rumsfrekvens som finns i den ursprungliga bilden kartläggs från mitten till kanterna (efter att ha använt fftshift ). För att utesluta de låga frekvenserna ställer vi in det centrala cirkulära området till 0.

Så här genererar du en skivformad binär mask med radie D med inbyggd funktion:

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

Maskering av frekvensdomänbilden kan göras genom att multiplicera FFT punktvis med den binära masken som erhållits ovan:

masked_ft = ft .* mask;

Låt oss nu beräkna det omvända FFT:

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

De höga frekvenserna i en bild är de vassa kanterna, så detta högpassfilter kan användas för att skärpa bilder.

Bildfiltrering

Låt oss säga att du har en bild rgbImg , t.ex. läs in med imread .

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

ange bildbeskrivning här

Använd fspecial att skapa ett 2D-filter:

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

ange bildbeskrivning här

Använd imfilter att applicera filtret på bilden:

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

ange bildbeskrivning här

Mäta egenskaper för anslutna regioner

Börjar med en binär bild, bwImg , som innehåller ett antal anslutna objekt.

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

ange bildbeskrivning här

För att mäta egenskaper (t.ex. område, centroid, etc) för varje objekt i bilden, använd regionprops :

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

stats är en strukturuppsättning som innehåller en struktur för varje objekt i bilden. Det är enkelt att komma åt en uppmätt egenskap hos ett objekt. För att till exempel visa området för det första objektet, helt enkelt,

>> stats(1).Area

ans =

    35

Visualisera objektets centroider genom att lägga dem över på originalbilden.

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

ange bildbeskrivning här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow