MATLAB Language
Bildbehandling
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')
Använd fspecial
att skapa ett 2D-filter:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Använd imfilter
att applicera filtret på bilden:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
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')
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