Szukaj…


Podstawowe obrazy I / O

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

Użyj imread do odczytu plików obrazów do matrycy w MATLAB.
Po imread obrazu jest on zapisywany w pamięci jako tablica ND:

>> size(img)
ans =
 256   320     3

Obraz 'football.jpg' ma 256 wierszy i 320 kolumn oraz 3 kanały kolorów: czerwony, zielony i niebieski.

Możesz teraz wykonać kopię lustrzaną:

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

Na koniec zapisz go jako obraz za pomocą imwrite :

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

Pobierz obrazy z Internetu

Tak długo, jak masz połączenie z Internetem, możesz odczytywać obrazy z hiperłącza

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

Filtrowanie za pomocą 2D FFT

Podobnie jak w przypadku sygnałów 1D, możliwe jest filtrowanie obrazów poprzez zastosowanie transformacji Fouriera, pomnożenie przez filtr w dziedzinie częstotliwości i przekształcenie z powrotem w domenę kosmiczną. Oto, w jaki sposób można zastosować filtry górnoprzepustowe lub dolnoprzepustowe do obrazu za pomocą Matlaba:

Niech image będzie oryginalnym, niefiltrowanym obrazem, oto jak obliczyć jego 2D FFT:

ft = fftshift(fft2(image));

Teraz, aby wykluczyć część widma, należy ustawić jego wartości pikseli na 0. Częstotliwość przestrzenna zawarta w oryginalnym obrazie jest odwzorowywana od środka do krawędzi (po zastosowaniu fftshift ). Aby wykluczyć niskie częstotliwości, ustawimy środkowy obszar kołowy na 0.

Oto jak wygenerować maskę binarną w kształcie dysku o promieniu D za pomocą wbudowanej funkcji:

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

Maskowanie obrazu w dziedzinie częstotliwości można wykonać przez pomnożenie FFT punktowo przez maskę binarną uzyskaną powyżej:

masked_ft = ft .* mask;

Teraz obliczmy odwrotną FFT:

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

Wysokie częstotliwości na obrazie są ostrymi krawędziami, więc ten filtr górnoprzepustowy może być używany do wyostrzania obrazów.

Filtrowanie obrazu

Załóżmy, że masz obraz rgbImg , np. rgbImg przy użyciu imread .

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

wprowadź opis zdjęcia tutaj

Użyj fspecial aby utworzyć filtr 2D:

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

wprowadź opis zdjęcia tutaj

Użyj imfilter aby zastosować filtr do obrazu:

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

wprowadź opis zdjęcia tutaj

Pomiar właściwości połączonych regionów

Począwszy od obrazu binarnego bwImg , który zawiera wiele połączonych obiektów.

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

wprowadź opis zdjęcia tutaj

Aby zmierzyć właściwości (np. Obszar, środek ciężkości itp.) Każdego obiektu na obrazie, użyj regionprops :

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

stats jest tablicą strukturalną, która zawiera strukturę dla każdego obiektu na obrazie. Dostęp do mierzonej właściwości obiektu jest prosty. Na przykład, aby wyświetlić obszar pierwszego obiektu, po prostu

>> stats(1).Area

ans =

    35

Wizualizuj centroidy obiektów, nakładając je na oryginalny obraz.

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

wprowadź opis zdjęcia tutaj



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow