Como se dice, “Una imagen vale más que diez mil palabras”. Una imagen digital está compuesta por miles y miles de píxeles.
Una imagen también podría definirse como una función bidimensional, f(x, y), donde x e y son coordenadas espaciales (planas) y, por lo tanto, la amplitud de f en cualquier par de coordenadas (x, y) se denomina intensidad. o nivel de gris de la imagen en ese momento. Cuando x, y, y por lo tanto los valores de amplitud de f son todos cantidades discretas finitas, llamamos a la imagen una imagen digital.
Segmentación de imágenes mediante diversas técnicas
1. Filtros básicos (máscaras):
Los siguientes filtros se utilizan para la detección de bordes y las discontinuidades de una imagen.
Operadores de primera derivada:
- Máscara Sobel : también se utiliza para detectar dos tipos de bordes en una imagen, uno en dirección vertical y otro en dirección horizontal.
- Máscara de Prewitt : también se utiliza para detectar dos tipos de bordes en una imagen, bordes horizontales y verticales. Los bordes se calculan utilizando la diferencia entre las intensidades de píxeles correspondientes de una imagen.
- Robert Mask : se utiliza en la detección de bordes al aproximar el gradiente de una imagen a través de la diferenciación discreta.
Operadores de segunda derivada:
- Laplaciano : se utiliza para encontrar áreas de cambio rápido (bordes) en las imágenes.
- Máscara LOG (Laplaciana de una Gaussiana) (σ=3)- Dado que los filtros derivados son muy sensibles al ruido, es común suavizar la imagen (usando un filtro Gaussiano) antes de aplicar la Laplaciana. Este proceso de dos pasos se denomina operación Laplaciana de Gauss (LoG).
- Canny edge detector : es un popular algoritmo de detección de bordes que consta de varias etapas y ofrece los mejores resultados en comparación con otros algoritmos.
El método basado en gradientes como el de Prewitt tiene el inconveniente más importante de ser sensible al ruido. El detector de bordes Canny es menos sensible al ruido pero más caro que el de Robert, Sobel y Prewitt. Sin embargo, el detector de bordes Canny funciona mejor que todas las máscaras.
Aplicación de la máscara Sobel:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply Sobel Operator % Display only the horizontal Edges sobelhz = edge(myimage,'sobel','horizontal'); subplot(3,3,2); imshow(sobelhz,[]); title('Sobel - Horizontal Edges'); % Apply Sobel Operator % Display only the vertical Edges sobelvrt = edge(myimage,'sobel','vertical'); subplot(3,3,3); imshow(sobelhz,[]); title('Sobel - Vertical Edges'); % Apply Sobel Operator % Display both horizontal and vertical Edges sobelvrthz = edge(myimage,'sobel','both'); subplot(3,3,4); imshow(sobelvrthz,[]); title('Sobel - All edges');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Aplicación de la máscara Prewitt:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply Prewitt Operator % Display both horizontal and vertical Edges Prewittsedg = edge(myimage,'prewitt'); subplot(3,3,6); imshow(Prewittsedg,[]); title('Prewitt - Edges');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Aplicación de la máscara de Robert:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply Roberts Operator % Display both horizontal and vertical Edges robertsedg = edge(myimage,'roberts'); subplot(3,3,5); imshow(robertsedg,[]); title('Roberts - Edges');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Aplicación de la máscara laplaciana:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply Laplacian Filter f=fspecial('laplacian'); lapedg = imfilter(myimage,f,'symmetric'); subplot(3,3,7); imshow(lapedg,[]); title('Laplacian Filter');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Aplicación de máscara LOG:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply LOG edge detection % The sigma used is 3 f=fspecial('log',[15,15],3.0); logedg1 = edge(myimage,'zerocross',[],f); subplot(3,3,8); imshow(logedg1); title('Log with sigma 3');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Aplicación del detector de bordes Canny:
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image mycolourimage = imread('image1.jpg'); myimage = rgb2gray(mycolourimage); subplot(3,3,1); imshow(myimage); title('Original Image'); % Apply Canny edge detection cannyedg = edge(myimage,'canny'); subplot(3,3,9); imshow(cannyedg,[]); title('Canny Edge');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
Canny Edge Detector ofrece los mejores resultados en comparación con otros filtros/máscaras que se utilizan para detectar los bordes de una imagen.
2. Transformada circular de Hough:
Es el procesamiento global y la especialización de Hough Transform. Se utiliza para detectar los círculos en una imagen de entrada. Esta transformación es selectiva para los círculos e ignora las elipses alargadas.
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image % Read the image that have circles i=imread('image14.jpg'); % show image imshow(i) % select max & min threshold of circles we want to detect Rmin = 10 Rmax = 50; % Apply Hough circular transform [centersDark1, radiiDark1] = imfindcircles(i, [Rmin Rmax],'ObjectPolarity','dark','Sensitivity',0.92); % show the detected circles by Red color -- viscircles(centersDark1, radiiDark1,'LineStyle','--')
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
3. Selección de umbral:
Es un método de umbralización local en el que estamos umbralizando una imagen de entrada localmente, pasando algunos parámetros. Tomamos una imagen que ya está operada por los bordes.
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image image = imread('image2.jpeg'); mean_image = imfilter(image, fspecial('average',[15,15]),'replica'); subtract = image - (mean_image+20); black_white = im2bw(subtract,0); subplot(1,2,1); imshow(black_white); title('Threshold Image'); subplot(1,2,2); imshow(image); title('Original Image');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
4. Método Otsu:
Es un método de umbralización global óptima. Otsu da el mejor resultado en comparación con la selección de umbral bajo la umbralización local. Este método minimiza la varianza dentro de la clase ponderada.
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image I1=imread('image2.jpeg'); %I1=rgb2gray(I); imshow(I1); figure, imhist(I1); T2 = graythresh(I1); it2= im2bw(I1,T2); figure,imshow(it2);
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
5. Cuenca morfológica:
En esto, los mínimos locales de los niveles de gris dan las cuencas de captación y los máximos locales definen las líneas de las cuencas hidrográficas. En la imagen de salida, es fácil detectar los marcadores.
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Display the original Image I= imread('image10.png'); %I rgb2gray(RGB); I1 = imtophat(I, strel('disk', 10)); figure, imshow(I1); I2 = imadjust(I1); figure,imshow(I2); level = graythresh(I2); BW = im2bw(I2,level); figure,imshow(BW); C=~BW; figure,imshow(C); D = ~bwdist(C); D(C) = -Inf; L = watershed(D); Wi=label2rgb(L,'hot','w'); figure,imshow(Wi); im=I;
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
6. Agrupamiento de K-medias:
Es un algoritmo que se utiliza para segmentar el área de interés del fondo. Divida los puntos de datos en K grupos al azar. Encuentre los centroides de cada grupo.
Opera en una array 2D donde los píxeles en filas y RGB en columnas. Tomamos valores medios para cada clase (K=3).
Aporte:
Código:
MATLAB
clc; close all; clear all; % Read Colour Image and convert it to a grey level Image % Load in an input image im = imread('image12.png'); % We also cast to a double array, because K-means requires it in matlab imflat = double(reshape(im, size(im,1) * size(im,2), 3)); K = 3 [kIDs, kC] = kmeans(imflat, K, 'Display', 'iter', 'MaxIter', 150, 'Start', 'sample'); colormap = kC / 256; % Scale 0-1, since this is what matlab wants % Reshape kIDs back into the original image shape imout = reshape(uint8(kIDs), size(im,1), size(im,2)); imwrite(imout - 1, colormap, 'image6.jpg');
Llame a la función anterior utilizando la ventana de comandos de MATLAB.
Producción:
K = 3 iter phase num sum 1 1 178888 1.52491e+08 2 1 7657 1.45223e+08 3 1 4597 1.42317e+08 4 1 3750 1.40017e+08 5 1 3034 1.38203e+08 6 1 2187 1.37096e+08 7 1 1552 1.36481e+08 8 1 1044 1.36165e+08 9 1 701 1.36014e+08 10 1 479 1.35939e+08 11 1 311 1.35906e+08 12 1 282 1.35883e+08 13 1 193 1.3587e+08 14 1 124 1.35865e+08 15 1 85 1.35863e+08 16 1 60 1.35861e+08 17 1 80 1.3586e+08 18 1 79 1.35858e+08 19 1 23 1.35858e+08 20 1 48 1.35858e+08 21 1 7 1.35858e+08 Best total sum of distances = 1.35858e+08
Publicación traducida automáticamente
Artículo escrito por ayushraghuwanshi80 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA