MATLAB Language
Bildverarbeitung
Suche…
Grundlegende Bild-E / A
>> img = imread('football.jpg');
Verwenden Sie imread
, um Bilddateien in eine Matrix in MATLAB zu lesen.
Sobald Sie ein Bild imread
, wird es als ND-Array im Speicher abgelegt:
>> size(img)
ans =
256 320 3
Das Bild 'football.jpg'
hat 256 Zeilen und 320 Spalten und drei Farbkanäle: Rot, Grün und Blau.
Sie können es jetzt spiegeln:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
Und zum Schluss schreibe es mit imwrite
als Bild imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
Abrufen von Bildern aus dem Internet
Solange Sie über eine Internetverbindung verfügen, können Sie Bilder über einen Hyperlink lesen
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
Filtern mit einer 2D-FFT
Wie bei 1D-Signalen ist es auch möglich, Bilder durch Anwenden einer Fourier-Transformation zu filtern, mit einem Filter im Frequenzbereich zu multiplizieren und zurück in den Raumbereich zu transformieren. So können Sie mit Matlab Hoch- oder Tiefpassfilter auf ein Bild anwenden:
Wenn das image
das ursprüngliche, ungefilterte Bild ist, wird die 2D-FFT wie folgt berechnet:
ft = fftshift(fft2(image));
Um nun einen Teil des Spektrums auszuschließen, müssen Sie die Pixelwerte auf 0 setzen. Die im Originalbild enthaltene Ortsfrequenz wird von der Mitte zu den Rändern fftshift
(nach dem Verwenden von fftshift
). Um die tiefen Frequenzen auszuschließen, setzen wir den zentralen Kreisbereich auf 0.
So erstellen Sie eine scheibenförmige binäre Maske mit dem Radius D
mithilfe der integrierten 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]);
Das Maskieren des Frequenzbereichsbildes kann durch Punktmultiplizieren der FFT mit der oben erhaltenen binären Maske erfolgen:
masked_ft = ft .* mask;
Nun lassen Sie uns die inverse FFT berechnen:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
Die hohen Frequenzen in einem Bild sind die scharfen Kanten. Mit diesem Hochpassfilter können Sie Bilder schärfen.
Bildfilterung
Angenommen, Sie haben ein Bild rgbImg
, zB Lesen Sie sich mit der imread
.
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
Verwenden Sie fspecial
, um einen 2D-Filter zu erstellen:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Verwenden Sie imfilter
, um den Filter auf das Bild anzuwenden:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
Eigenschaften von verbundenen Regionen messen
Beginnend mit einem Binärbild, bwImg
, das mehrere verbundene Objekte enthält.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
Um Eigenschaften (z. B. Fläche, Schwerpunkt usw.) jedes Objekts im Bild zu regionprops
, verwenden Sie regionprops
:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
ist ein Struktur-Array, das für jedes Objekt im Bild eine Struktur enthält. Der Zugriff auf eine gemessene Eigenschaft eines Objekts ist einfach. Um beispielsweise den Bereich des ersten Objekts anzuzeigen, einfach
>> stats(1).Area
ans =
35
Visualisieren Sie die Objektschwerpunkte, indem Sie sie dem Originalbild überlagern.
>> 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