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

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie fspecial , um einen 2D-Filter zu erstellen:

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

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie imfilter , um den Filter auf das Bild anzuwenden:

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow