Algoritmos de procesamiento de imágenes digitales utilizando MATLAB

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:

Imagen original

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:

Imagen original

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:

Imagen original

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:

Imagen original

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:

Imagen original

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:

Imagen original

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.

Comparación de todos los filtros utilizados para la detección de bordes

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:

Imagen original

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:

Imagen transformada de Hough circular

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:

Imagen original

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:

Imagen original

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:

Imagen de umbral global

Histograma de imagen

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:

Imagen original

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:

Imagen original

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *