MATLAB Language
Przetwarzanie obrazu
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')
Użyj fspecial
aby utworzyć filtr 2D:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Użyj imfilter
aby zastosować filtr do obrazu:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
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')
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