Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.

Matlab - Segmentar una imágen

  Imprimir  
Vista:

Segmentar una imágen

Publicado por Oscar mauro840321@hotmail.com (3 intervenciones) el 22/02/2012 16:44:33
Hola.
Por favor si me pueden colaborar en el siguiente ejercicio:

Necesito tomar una imágen y hacer que tome el borde de la misma y la redibuje. Me explico:

Tengo una imágen binaria (unos y ceros) que importo imread('C:\...\imagen.jpg'); es decir una mancha negra sobre un fondo blanco y necesito que recorra la matriz y cada vez que encuentre un pixel negro (el primero de cada borde) lo almacene en una nueva matriz para luego mostrar únicamente el contorno de la imágen inicial.

Lo que creo que se debe hacer es realizar 4 bucles para recorrer la imágen en los cuatro sentidos (izquierda a derecha, derecha a izquierda, arriba hacia abajo y de abajo hacia arriba) y cuando localice el primer pixel negro lo vaya almacenando en una nueva matriz para luego ser mostrada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Matlab
- Código fuente de Matlab
- Cursos de Matlab
- Temas de Matlab
información
Códigos de Matlab
- COORDENADAS CARTESIANAS
- TRIÁNGULO
- Fuerzas de Coulomb
Imágen de perfil de Dave

Segmentar una imágen

Publicado por Dave correa.dave30@gmail.com (860 intervenciones) el 23/02/2012 22:16:06
Hola Oscar;

De tu consulta noto que tienes claro la funcionalidad de tu programa, creo que lo unico que te falta es programarlo?. Por lo tanto solo te quedaría iniciar a programar, aca en el foro mayormente se apoya en la solución de problemas especificos.

Quizas una alternativa pueda ser que uitlices las funciones de segmentación de imagenes propias de Matlab, te dejo un ejemplo:

% SEGMENTACIÓN
% Si la imagen es RGB, la pasa a escala de grises

if size(imagen,3)==3 %3 planos: RGB
gris=rgb2gray(imagen);
else
gris=imagen;
end

% Binarización con umbral automático *0.60
bina=im2bw(gris,graythresh(gris)*0.60);

% Procesamiento morfológico
bina=bwmorph(bina,'open'); % Eliminar picos
bina=bwmorph(bina,'close'); % Eliminar huecos

% Etiquetar los objetos de la imagen
L=bwlabel(bina);

% Calcular "área" y "caja" de objetos
prop=regionprops(L,{'Area','BoundingBox'});

% Tomar el área máxima
[m pam]=max([prop.Area]);

% "roi" contiene solo la imagen más grande
roi=ismember(L,pam);
ee=strel('disk',18,0);
roi=imdilate(roi, ee);

% Obtener los límites del área máxima
limites=prop(pam).BoundingBox;

% Presentar el área de interés (roi)
imagesc(roi)
colormap gray

Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

Segmentar una imágen

Publicado por Dave correa.dave30@gmail.com (860 intervenciones) el 23/02/2012 22:17:20
Hola Oscar;

De tu consulta noto que tienes claro la funcionalidad de tu programa, creo que lo unico que te falta es programarlo?. Por lo tanto solo te quedaría iniciar a programar, aca en el foro mayormente se apoya en la solución de problemas especificos.

Quizas una alternativa pueda ser que uitlices las funciones de segmentación de imagenes propias de Matlab, te dejo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
% SEGMENTACIÓN
% Si la imagen es RGB, la pasa a escala de grises
 
if size(imagen,3)==3 %3 planos: RGB
gris=rgb2gray(imagen);
else
gris=imagen;
end
 
% Binarización con umbral automático *0.60
bina=im2bw(gris,graythresh(gris)*0.60);
 
% Procesamiento morfológico
bina=bwmorph(bina,'open'); % Eliminar picos
bina=bwmorph(bina,'close'); % Eliminar huecos
 
% Etiquetar los objetos de la imagen
L=bwlabel(bina);
 
% Calcular "área" y "caja" de objetos
prop=regionprops(L,{'Area','BoundingBox'});
 
% Tomar el área máxima
[m pam]=max([prop.Area]);
 
% "roi" contiene solo la imagen más grande
roi=ismember(L,pam);
ee=strel('disk',18,0);
roi=imdilate(roi, ee);
 
% Obtener los límites del área máxima
limites=prop(pam).BoundingBox;
 
% Presentar el área de interés (roi)
imagesc(roi)
colormap gray

Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Segmentar una imágen

Publicado por Oscar (3 intervenciones) el 23/02/2012 22:37:29
Hola Dave.

Muchas gracias por responder a mi pregunta.

Voy a probar el código, aunque me hubiese gustado poder manejarlo desde algo más básico, pues la idea es entender cómo Matlab trabaja este tipo de funciones ya implementadas; claramente usando algo de programación estructurada (ciclos for, while, condiciones if, etc).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

Segmentar una imágen

Publicado por Dave correa.dave30@gmail.com (860 intervenciones) el 23/02/2012 22:43:41
Hola Oscar;

De hecho que lo mejor es desarrollar sus propios códigos y entender todo lo que se hacer, pero para eso es necesario saber programar o contratar los servicios de un programador. Pero de todas maneras, serpia bueno que lo intentes.

Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

Segmentar una imágen

Publicado por Dave correa.dave30@gmail.com (860 intervenciones) el 01/03/2012 02:30:35
Hola Oscar;

Como te fue con el desarrollo de tu código.

Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Segmentar una imágen

Publicado por Jorge (1 intervención) el 29/05/2014 01:32:18
Mira que eres un capo man....gracias, me has ayudado mucho en mi proyecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Segmentar una imágen

Publicado por Shirley Fuentes (1 intervención) el 13/04/2015 02:35:02
Tal vez este otro ejemplo te puede ayudar, es usando el algoritmo de conectividad con blucles

para la siguiente imagen:

http://static2.bigstockphoto.com/thumbs/5/3/4/large2/43502047.jpg



%% IMAGEN A BW %%
imag=imread('images.jpg');
grises=rgb2gray(imag);
%figure, imshow(blne);
%B=logical(grises)
level = graythresh(imag);
BW1 = im2bw(imag,level);
figure, imshow(imag), figure, imshow(grises), figure, imshow(BW1);

BW = ~BW1;
BW = 1-BW1;
BW = (BW1 == 0);
%imwrite(BW,'ss1.png');
figure,imshow(BW);


%% ETIQUETADO %%
[mfilas,ncols]=size(BW);
rbin=size(BW);
%v=zeros(197:256);
v=[3:1:600];
a=0;

for t=2:mfilas %para cada fila
for r=2:ncols %para cada columna

if BW(t,r)==0; %mientras el pixel sea cero seguira siendo la misma
rbin(t,r)=0;
end

if (BW(t,r)==1 && BW(t,r-1)==0 && BW(t-1,r)==0);%Si t=0 y r=0 asignar nueva
a=a+1;
z=v(a);
rbin(t,r)=z;
end


if (BW(t,r-1)==1 && BW(t-1,r)==0);%Si t=0 y r=0 asignar nueva
VC=rbin(t,r-1);
end


if (BW(t,r-1)==0 && BW(t-1,r)==1);%Si t=0 y r=0 asignar nueva
VD=rbin(t-1,r);
end

if (BW(t,r)==1 && BW(t,r-1)==1 && BW(t-1,r)==1);%Si t=0 y r=0 asignar nueva
VE=rbin(t-1,r);
rbin(t,r)=VE;
CH1=rbin(t,r-1);
CH2=rbin(t-1,r);
rbin(rbin==CH1) = CH2;
end

end
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar