MATLAB Language
Procesamiento de imágenes
Buscar..
Imagen básica de E / S
>> img = imread('football.jpg');
Use imread
para leer archivos de imagen en una matriz en MATLAB.
Una vez que haya imread
una imagen, se almacena como una matriz ND en la memoria:
>> size(img)
ans =
256 320 3
La imagen 'football.jpg'
tiene 256 filas y 320 columnas y tiene 3 canales de color: rojo, verde y azul.
Ahora puedes reflejarlo:
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
Y finalmente, escríbalo como una imagen usando imwrite
:
>> imwrite(mirrored, 'mirrored_football.jpg');
Recuperar imágenes de internet
Mientras tenga una conexión a Internet, puede leer imágenes desde un hipervínculo.
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
Filtrado utilizando un FFT 2D
Al igual que para las señales 1D, es posible filtrar imágenes aplicando una transformación de Fourier, multiplicando con un filtro en el dominio de la frecuencia y transformando nuevamente en el dominio del espacio. Aquí es cómo puede aplicar filtros de paso alto o bajo a una imagen con Matlab:
Deje que la image
sea la original, sin filtrar. A continuación se muestra cómo calcular su FFT 2D:
ft = fftshift(fft2(image));
Ahora, para excluir una parte del espectro, es necesario establecer sus valores de píxel en 0. La frecuencia espacial contenida en la imagen original se asigna desde el centro a los bordes (después de usar fftshift
). Para excluir las bajas frecuencias, estableceremos el área circular central en 0.
Aquí se explica cómo generar una máscara binaria en forma de disco con radio D
mediante la función incorporada:
[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]);
El enmascaramiento de la imagen del dominio de la frecuencia se puede hacer multiplicando la FFT puntualmente con la máscara binaria obtenida anteriormente:
masked_ft = ft .* mask;
Ahora, vamos a calcular la FFT inversa:
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
Las frecuencias altas de una imagen son los bordes afilados, por lo que este filtro de paso alto se puede usar para enfocar imágenes.
Filtrado de imágenes
Digamos que tiene una imagen rgbImg
, por ejemplo, lea usando imread
.
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
Use fspecial
para crear un filtro 2D:
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
Use imfilter
para aplicar el filtro en la imagen:
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
Medición de las propiedades de las regiones conectadas
Comenzando con una imagen binaria, bwImg
, que contiene varios objetos conectados.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
Para medir las propiedades (por ejemplo, área, centroide, etc.) de cada objeto en la imagen, use regionprops
:
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
es una matriz de estructura que contiene una estructura para cada objeto en la imagen. Acceder a una propiedad medida de un objeto es simple. Por ejemplo, para mostrar el área del primer objeto, simplemente,
>> stats(1).Area
ans =
35
Visualice los centroides del objeto superponiéndolos en la imagen original.
>> 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