MATLAB Language
Обработка изображения
Поиск…
Основные изображения ввода / вывода
>> img = imread('football.jpg');
Используйте imread
для чтения файлов изображений в матрицу в MATLAB.
Как только вы imread
изображение, оно хранится в памяти как ND-массив:
>> size(img)
ans =
256 320 3
Изображение 'football.jpg'
имеет 256 строк и 320 столбцов и имеет 3 цветовых канала: красный, зеленый и синий.
Теперь вы можете отразить это:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
И, наконец, напишите это как изображение, используя imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
Извлечение изображений из Интернета
Пока у вас есть подключение к Интернету, вы можете читать изображения из гиперссылки
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
Фильтрация с использованием 2D FFT
Как и для сигналов 1D, можно фильтровать изображения, применяя преобразование Фурье, умножая его на фильтр в частотной области и преобразовывая обратно в пространственную область. Вот как вы можете применять фильтры с высоким или низким пропусканием к изображению с помощью Matlab:
Пусть image
будет оригинальным, нефильтрованное изображение, вот как вычислить его 2D FFT:
ft = fftshift(fft2(image));
Теперь, чтобы исключить часть спектра, нужно установить его значения пикселей равными 0. Пространственная частота, содержащаяся в исходном изображении, отображается от центра к краям (после использования fftshift
). Чтобы исключить низкие частоты, мы установим центральную круговую область на 0.
Вот как создать двоичную маску в форме диска с радиусом D
используя встроенную функцию:
[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]);
Маскирование изображения частотной области может быть выполнено путем умножения точки БПФ на двоичную маску, полученную выше:
masked_ft = ft .* mask;
Теперь давайте вычислим обратный БПФ:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
Высокими частотами изображения являются острые края, поэтому этот фильтр верхних частот может использоваться для резкости изображений.
Фильтрация изображений
Допустим, у вас есть изображение rgbImg
, например, чтение с использованием imread
.
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
Используйте fspecial
для создания 2D-фильтра:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Используйте imfilter
чтобы применить фильтр к изображению:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
Измерение свойств подключенных регионов
Начиная с бинарного изображения, bwImg
, который содержит несколько связанных объектов.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
Чтобы измерить свойства (например, область, центр и т. Д.) regionprops
объекта на изображении, используйте regionprops
:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
- это массив структур, который содержит структуру для каждого объекта изображения. Доступ к измеренному свойству объекта прост. Например, чтобы отобразить область первого объекта, просто,
>> stats(1).Area
ans =
35
Визуализируйте центроиды объектов, наложив их на исходное изображение.
>> 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