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




