Práctica 5 Con Matlab (Reparado) (Reparado)

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 11

Práctica 5 Parte 1:

Procesamiento medio con Matlab

INGENIERÍA EN ELECTRÓNICA Y AUTOMATIZACIÓN

Universidad de las Fuerzas Armadas ESPE

ELECTRÓNICA MÉDICA

Nota del autor:

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

Ing. Electrónica, ESPE.

Katherine Villarreal

2023

Práctica 5 Parte 1: Procesamiento medio con Matlab

3 de febrero 2023
Vecindad entre pixeles:

Un pixel en las coordenadas (x,y) tiene 2 vecinos horizontales y 2 vecinos verticales:


(x+1,y),(x-1,y),(x,y+1),(x,y-1). También tiene 4 vecinos diagonales: (x+1, y+1), (x+1,
y-1), (x-1, y+1), (x-1,y-1).

Dos pixeles son vecinos si son adyacentes o tienen en común una de sus fronteras o una
de sus esquinas.

Ilustración 1: a) Vecino lateral; b) Vecino diagonal


La vecindad de un pixel, está formado por un número finito de pixeles. Hay vecindades
de 4 y vecindades de 8; la primera formada por vecinos directos y la segunda por
vecinos directos e indirectos.

a) Conectividad

La conectividad entre pixeles sirve para establecer límites en objetos o entre regiones
de componentes en una imagen. Hay dos tipos: Conectividad a 4 y conectividad a 8.
Dos pixeles están conectados si son adyacentes o tienen vecindad 4 o vecindad 8 y su
nivel de gris cumple cierto criterio.

Ejercicio: Dada la siguiente matriz de parte de una imagen binaria, establezca


manualmente el número de regiones usando la conectividad de 4 y de 8. Indique el
número de etiquetas encontradas. Pinte cada región de diferente color.
0 0 0 0 0 0 0 0

0 1 1 1 0 1 0 1

1 0 0 1 0 1 0 1

1 0 1 1 0 1 0 1

1 0 0 0 0 1 0 1

0 0 0 1 0 1 1 1

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

Contiene 6 segmentos

CONECTIVIDAD 8

0 0 0 0 0 0 0 0

0 1 1 1 0 1 0 1

1 0 0 1 0 1 0 1

1 0 1 1 0 1 0 1

1 0 0 0 0 1 0 1

0 0 0 1 0 1 1 1

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

Contiene 3 segmentos

0-negro

1-blanco

b) SEGMENTACIÓN DE UNA IMAGEN

Subdivide la imagen en partes, o aísla ciertos objetos de la imagen, para seleccionar


aquellas de formas predeterminadas. Es un paso previo para extraer parámetros
cuantitativos, cualitativos y evaluar la morfología y funcionamiento del objeto
segmentado. Los algoritmos de segmentación de imágenes médicas tienen un papel
importante en la imagenología médica. Su aplicación incluye la detección de contornos
coronarios en angiogramas, cuantificación de lesiones de esclerosis múltiple, simulación
y planificación de cirugías, medición del volumen de tumores y su respuesta a terapias,
clasificación automatizada de células sanguíneas, estudio del desarrollo del cerebro,
detección de micro calcificaciones en mamografías, entre otras aplicaciones. Se trabaja
con imágenes binarizadas para separar los 1 de los 0, donde los 0s permiten identificar
la de posición y dimensión del objeto. A continuación, realizaremos algunas de las
técnicas de segmentación existentes. (https://youtu.be/bYpvZOSWhxk)

 G.1: Umbralización

Es una técnica de segmentación que se usa en la industria, donde se define un


umbral que separa los objetos de interés respecto del fondo. Se emplea el histograma
para establecer dos picos entre los pixeles de mayor y menor intensidad. El comando
bwlabel permite crear regiones dentro de alguna imagen binarizada.

Numero_objetos = bwlabel(Imagen_binaria,4) // también se puede usar


Numero_objetos = bwlabel(Imagen_binaria,8)

Ver en la tabla creada, cuantas regiones crea al leer la imagen monedas.jpg.

NOTA: Los objetos a contar deben estar en blanco, de no ser así usar el
complemento(not).
El 4 u 8 representa el número de conexiones de cada pixel con sus vecinos.
Para obtener el número de objetos: n= max(max(Numero_objetos))

Dado que la imagen puede tener ruido su interpretación final requiere de filtros y
operaciones morfológicas de cierre o apertura, (ver más abajo) que permiten rastrear en
la imagen las etiquetas de los objetos conectados con el comando label2rgb(imagen).
Una vez etiquetada se puede extraer las características de los objetos. También puede
seleccionar los objetos con bwselect (imagen, conectividad4u8) para usar el mouse para
seleccionar un punto y enter y luego mostrar con imshow que segmento de imagen
elegido.

Filtros para eliminar ruido: Reduce el ruido indeseable, anulando ciertas áreas que no
corresponden a ningún segmento de interés: bwareaopen(ImagenBinaria, tamañoRuido)
es el más usado.

 G.2: Crecimiento de Regiones:


El crecimiento de regiones es una técnica muy empleada para extraer regiones de la
imagen que están conectadas según cierto criterio predefinido. Esta técnica requiere
previamente que a estas imágenes se les aplicaron filtros de reducción de ruido y
realzado de bordes. Estas otras formas de segmentación orientada a las regiones, están
definidas en matlab con los comandos:

 Imsegfmm(matriz_de_pesos, máscara_o_ubicaciónsemilla, umbral)


 Donde la matriz de pesos se puede calcular con el comando graydiffweight.
 graydiffweight(Imagen, escala_grises_referencia)

Máscara o ubicación semilla es una matriz lógica que puede tener el tamaño de la
imagen o dos ubicaciones específicas que contienen los índices de la columna y fila.
Umbral se especifica como un escalar no negativo entre 0 y 1. Los valores bajos suelen
dar lugar a grandes regiones y los valores altos producen regiones pequeñas.

 Función regionprops: (Estadística de las regiones)


D = regionprops(L, properties) donde L es una matriz de etiquetas de componentes
conexas y D es una estructura de array conteniendo propiedades de las distintas regiones
de la imagen binaria correspondiente a L.
Ejemplo:
I=imread(‘FigProb1.jpg’);
T=graythresh(I);
IB=im2bw(I,T);
[L,n]=bwlabel(IB,4);
D = regionprops(L, ‘all’);
D.centroide(1)
%coordenadas del centro de las regiones

Ejercicio1: Use las dos formas de segmentación anteriores con una imagen DICOM
presente los resultados de la segmentación, el número de estructuras encontradas, y
uno de los segmentos visualizados.
Código Matlab
clc
close all
clear all
A=dicomread('IM218');
subplot(1,3,1)
imshow(A,[])
title('Imagen Dicom Principal');
seedpointR=15;
seedpointC=67;
W = graydiffweight (A, seedpointC, seedpointR, 'GrayDifferenceCutoff' , 25);
subplot(1,3,2)
imshow(log(W),[])
title('Imagen Dicom');
thresh=0.02;
BW=imsegfmm(W, seedpointC, seedpointR, thresh);
subplot(1,3,3)
imshow(BW,[])
title('Imagen Segmentada');

Imagen de Matlab
Imagen Dicom Principal Imagen Dicom Imagen Segmentada

Ejercicio2: Eliminar los segmentos con áreas inferiores a 50 en una imagen a colores.
Pegar imagen resultante.
Código Matlab

Imagen de Matlab

Operaciones morfológicas

a) OPERACIONES MORFOLÓGICAS:
Las operaciones más utilizadas son la dilatación que adiciona pixeles a la imagen, de
forma que la imagen se suaviza. O la erosión que remueve pixeles en la frontera de la
imagen. Esto facilita la reconstrucción de las imágenes y se usa como filtros para
eliminar ruido en el caso de la erosión o para rellenar figuras inconclusas en caso de la
dilatación.

Se puede dilatar o erosionar la imagen, aplicando las funciones (imdilate e imrode) use
la ayuda de Matlab, para completar la información de dilatar y erosionar la imagen
binaria

Ejemplo: Construir 5 rectángulos de diferentes tamaños


Ejercicio: Genere una imagen de cinco cuadrados de diferentes tamaños. Realice la
dilatación y erosión de la imagen con tres elementos estructurantes. Comente los
resultados.

Código para imágenes a colores

Erosión
%%Erosion
I =imread('hormigas.png');
imshow(I)
I1=rgb2gray(I);
T=graythresh(I1);
IB=imbinarize(I1,T);
IB=not(IB);
BW2 = bwareaopen(IB,50);
imshowpair(IB,BW2,'montage')
title('imagenBinaria_vs_imagenFiltrada')
S=strel('rectangle',[2 3]);
I4=imerode(IB,S);
figure
imshowpair(IB,I4,'montage')
title('imagenBinaria_vs_imagenErosionada')
I5= imsubtract(IB,BW2);
I6= imsubtract(IB,I4);
figure;imshowpair(I5,I6,'montage')
title('ElementosEliminadospoFiltado_vs_ElemntosEliminadosPorErosion')

Dilatación
%%Dilatacion
I =imread('hormigas.png');
I1=rgb2gray(I);
T=graythresh(I1);
IB=imbinarize(I1,T);
IB=not(IB);
BW2 = bwareaopen(IB,50);
%imshowpair(IB,BW2,'montage')
%title('imagenBinaria_vs_imagenFiltrada')
S=strel('rectangle',[2 3]);
I7=imdilate(BW2,S);
imshow(I7)

Codigo en Matlab
clc
close all
clear all
%%imagen1
A=imread('hormiga.jpg');
subplot(1,5,1)
imshow(A)
title('Imagen Original')
T=graythresh(A);
IB=im2bw(A,T);
subplot(1,5,2)
imshow(IB)
title('Imagen Binarizada')
z= strel('square',8);
% z = strel('sphere',4);
% z=strel('cube',5);
I2=edge(IB);
subplot(1,5,3)
imshow(I2)
title('Imagen I2')
I3=imdilate(I2,z);
subplot(1,5,4)
imshow(I3)
title('Imagen Dilatada')
I4=imerode(I3,z);
subplot(1,5,5)
imshow(I4)
title('Imagen')

Imagen en Matlab
Imagen Original Imagen Binarizada Imagen I2 Imagen Dilatada Imagen

EROSIÓN
Codigo en Matlab
clc;
clear all ;
close all;
I =imread('hormiga.jpg');
imshow(I)
I1=rgb2gray(I);
T=graythresh(I1);
IB=imbinarize(I1,T);
IB=not(IB);
BW2 = bwareaopen(IB,50);
imshowpair(IB,BW2,'montage')
title('imagenBinaria_vs_imagenFiltrada')
S=strel('rectangle',[2 3]);
I4=imerode(IB,S);
figure
imshowpair(IB,I4,'montage')
title('imagenBinaria vs imagenErosionada')
I5= imsubtract(IB,BW2);
I6= imsubtract(IB,I4);
figure;imshowpair(I5,I6,'montage')
title('Elementos Eliminados por Filtado vs Elemntos
Eliminados Por Erosion')

Imagen en Matlab

imagenBinariavs i magenFiltrada

imagenBinaria vs imagenErosionada

Elementos Eliminados por Filtado vs Elemntos Eliminados Por Erosion

DILATACIÓN
Codigo en Matlab
I =imread('hormiga.jpg');
I1=rgb2gray(I);
T=graythresh(I1);
IB=imbinarize(I1,T);
IB=not(IB);
BW2 = bwareaopen(IB,50);
%imshowpair(IB,BW2,'montage')
%title('imagenBinaria_vs_imagenFiltrada')
S=strel('rectangle',[2 3]);
I7=imdilate(BW2,S);
imshow(I7)

Imagen en Matlab

b) OPERACIONES DE CIERRE Y APERTURA:


Usado para el procesamiento de imágenes que no pueden segmentarse fácilmente.
CIERRE: Permite unir elementos cercanos, lo que requiere primero dilatación y luego
se erosiona para eliminar el ruido (imclose(imagen,estructura))
APERTURA: Permite recuperar los elementos mayores de una imagen. Primero se
erosiona y luego se dilata para recuperar y obtener la nueva imagen I2 =
imopen(Imagen,SE)

c) EXTRACCIÓN DE LA FRONTERA:

Primero se erosiona y luego se resta la imagen original de su imagen erosionada. El


elemento estructurante por lo general es un cuadrado de 3x3.

Ejercicio: Usar los comandos de matlab, para obtener la apertura, cierre y la frontera de
la Fig.3.15
CÓDIGO Matlab

clc
close all
clear all
%%imagen1
A=imread('cafe.jpg');
% A=rgb2gray(A);
subplot(1,5,1)
imshow(A)
title('Imagen Original')
K=graythresh(A);
IB=imbinarize(A,K);
subplot(1,5,2)
imshow(IB)
title('Imagen Binarizada')
V=strel('square',9);
I2=imopen (IB,V);
subplot(1,5,3)
imshow(I2)
title('Imagen Open')
I3=imclose (IB,z);
subplot(1,5,4)
imshow(I3)
title('Imagen Close')
I4=imerode(IB,z);
I5=IB-I4;
subplot(1,5,5)
imshow(I5)
title('Imagen Erode')
Imagen MATLAB

Imagen Original Imagen Binarizada Imagen Open Imagen Close Imagen Erode

Conclusión

La aplicación de las diferentes estructuras de arreglo ayuda a mejorar o a empeorar a la


imagen según el tipo que llega a usarse.

Las operaciones de cierre y apertura se han usado para el procesamiento de imágenes


que no pueden segmentarse fácilmente, y así llegar a mejorar a la imagen

También podría gustarte