Matlab - Segmentar una imágen
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. También te puede interesar...
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/
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 grayEspero que sea de alguna ayuda. Saludos Dave Correa correa.dave30@gmail.com Servicios de Programación Matlab http://fismatlab.blogspot.com/
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).
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/
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/ quiero sacar un dato de cada doce de un vector columna. como lo hago? reconstruccion de una matriz desde un vector |