Gracias por este mega curso!!!! Hermoso balance de la teoría con lo practico y el tamaño de los vídeos perfectos para solo obtener lo esencial, un semestre de procesamiento de imágenes resumido en esta maravillosa entrega 👏
Wow te amo, la manera en como explicas y el uso de ejemplo para que sea más didáctico me fascino. Estoy desarrollando junto con otras personas un clasificador de colores usando redes neuronales, gracias a ti estoy un paso más adelante para la obtención de datos desde una cámara fotográfica. Excelente vídeo.
Gracias por el aporte, muy buen material. Estoy utilizando el procesamiento para determinar diámetros de gota pequeños en imágenes generadas con una cámara de alta velocidad.
Excelente curso, necesito hacer un programa que detecte formas, en especial una vela, para la aplicación de un sistema de detección de un área menor para así generar una alerta, el problema que tengo es en la segmentación de la imagen, ya que no me segmenta bien y en ocasiones cuando están muy juntas las velas, el regionprops me lo toma como un solo elemento, no se si tienes algún consejo para que esto no pase, muchas gracias.
Toda la parte de procesamiento previo ayudará mucho a modificar la imagen y mejorar la segmentación. Con las modificaciones morfológicas disponibles en MATLAB, saturación de brillo, etc.
estaba buscando eso de los viscircles, aqui mi pregunta va relacionada a poner en una gráfica otro tipo de imagen?, en vez de "viscircles" que es un circulo poner otra figura
Está la función de Matlab imcrop, sólo hay que meterle las coordenadas para recortar. Si tienes el tamaño de la imagen (número de filas y columnas) vas a poder obtener las coordenadas de cada nueva imagen.
Muchas gracias, maestra! Quiero consultar algo, con todos los temas que ya explicaste anteriormente pude hacer el preprocesamiento de la imagen y obtener el histograma de colores de un pie. Mi objetivo es obtener información real para solucionar el problema del pie diabético con plantillas personalizadas. Ya pude obtener la información del histograma, y el último paso es saber el tamaño real del pie en mi imagen estandarizada a 35 cm desde la camara hasta la planta del pie (lo cual ha sido una gran dificultad para encontrar un comando que dé esa información), y a partir de eso tener mi modelo 3D con el tamaño en cm del pie (real), juntando las presión que ejerce el pie (que ya tengo del histograma), hay algún comando que pueda encontrar, o qué me sugieres? Muchas gracias de antemano.
Lo más sencillo sería usar por fuera del algoritmo un sensor de distancia (un ultrasónico por ejemplo), si es mediante el procesamiento de la imagen, se me ocurre por ejemplo encontrar las ROI dentro de la imagen, sus bordes y realizar una especie de mapeo ya con la distancia estandarizada. Que cierto número de pixeles del borde corresponden a x cm. Hay algunas funciones, pero sería cuestión de ver si se puede adaptar a tu imagen. Código tomado de MathWorks: %Lea la imagen en el espacio de trabajo. im = imread('foto.png'); %Recopila datos sobre la imagen, como su tamaño, y almacena los datos en una estructura. sz = size(im); myData.Units = 'pixels'; myData.MaxValue = hypot(sz(1),sz(2)); myData.Colormap = hot; myData.ScaleFactor = 1; %Muestre la imagen en un eje. hIm = imshow(im); %Especifica una función de devolución de datos. ButtonDownFcn pasa la estructura a la función de devolución de datos. myData es una función de devolución de datos, crea los objetos de línea y comienza a dibujar los ROI. hIm.ButtonDownFcn = @(~,~) startDrawing(hIm.Parent,myData); %Cree la función utilizada con la devolución de llamada para crear ROI de línea.ButtonDownFcn Esta función: 1. Crea una instancia de un objeto de ROI de línea. 2. Configura a los oyentes para que reaccionen a los clics y al movimiento del ROI. 3. Agrega un menú contextual personalizado a los ROI que incluye una opción 'Eliminar todo'. 4. Comienza a dibujar el ROI, utilizando el punto en el que se hace clic en la imagen como punto de partida. function startDrawing(hAx,myData) % Create a line ROI object. Specify the initial color of the line and % store the |myData| structure in the |UserData| property of the ROI. h = images.roi.Line('Color',[0, 0, 0.5625],'UserData',myData); % Set up a listener for movement of the line ROI. When the line ROI moves, the |updateLabel| callback updates the text in the line ROI label and changes the color of the line, based on its length. addlistener(h,'MovingROI',@updateLabel); % Set up a listener for clicks on the line ROI. When you click on the line ROI, the |updateUnits| callback opens a GUI that lets you specify the known distance in real-world units, such as, meters or feet. addlistener(h,'ROIClicked',@updateUnits); % Get the current mouse location from the |CurrentPoint| property of the axes and extract the _x_ and _y_ coordinates. cp = hAx.CurrentPoint; cp = [cp(1,1) cp(1,2)]; % Begin drawing the ROI from the current mouse location. Using the |beginDrawingFromPoint| method, you can draw multiple ROIs. h.beginDrawingFromPoint(cp); % Add a custom option to the line ROI context menu to delete all existing line ROIs. c = h.UIContextMenu; uimenu(c,'Label','Delete All','Callback',@deleteAll); end Te recomiendo leer: la.mathworks.com/help/images/measure-distances-in-images.html
@@mundotecnologico6659 ¡Mucha gracias, Maestra! Aunque el sensor sería en tiempo real, verdad? A mí me interesaría conocer los datos reales en una imagen que ya fue tomada y saber cuánto mide el pie de largo y ancho.
Para la detección del color verde, aquí quedará una imagen binaria con sólo el color verde, se puede ajustar el umbral de im2bw para que sea más específico con el color verde: a = imread('Paisaje.jpg'); ag = a(:,:,2); alogical= im2bw(ag,0.8); % Convertimos a binario BW = imfill(BW,'holes'); % Rellena los huecoso Después identifica la forma con el color verde que ya está segmentada en la imagen binaria y la recorta en una imagen más pequeña, dentro del objeto stats ya están todos los datos de las regiones como el centro, el área, etc. Y en I1 está la imagen recortada con la región, suponiendo que sólo es una: L = bwlabel(BW); % Crea regiones (etiqueta componentes conectados) numele = max(max(L)); % Número de objetos etiquetados stats = regionprops(L,'all'); % Estadísticas de las regiones E = stats(1).BoundingBox; % Toma la frontera de la 1ra región I1 = imcrop(I,E); % Devuelve la 1ra región Si quisieras enviar una señal cuando encuentre la forma de color verde, parte de lo anterior tendría que estar dentro de un ciclo if, con la variable numele se puede saber si ha encontrado regiones: if numele>=1 *** Aquí se ejecutarían las demás instrucciones y al final sólo envías la señal no sé qué tipo de señal por serial o cómo. end Espero que te sea de ayuda. Gracias por ver los videos!
Sí se podría, el truco es analizar imagen por imagen del video de la misma forma e ir desplegando el resultado, como lo hace tan rápido MATLAB se ve fluido como un video
%recorreo todas las monedas y las recorta for index = 1:numele informObj = inform(index).BoundingBox; %toma la frontera de la primera region moneda = imcrop(img, informObj); %devulve la primera region figure(1), subplot(1,numele,index), imshow(moneda) end
buen aporte , con 8 videos aprendí todo un ciclo y sobre todo salve el curso . muchas gracias por subir estos contenidos .
Qué genial!! 👏🏼👏🏼👏🏼
Gracias por este mega curso!!!! Hermoso balance de la teoría con lo practico y el tamaño de los vídeos perfectos para solo obtener lo esencial, un semestre de procesamiento de imágenes resumido en esta maravillosa entrega 👏
Gracias por comentar!!! Es un gran gusto hacer los videos y que sean tan bien recibidos! 🙌
Wow te amo, la manera en como explicas y el uso de ejemplo para que sea más didáctico me fascino. Estoy desarrollando junto con otras personas un clasificador de colores usando redes neuronales, gracias a ti estoy un paso más adelante para la obtención de datos desde una cámara fotográfica. Excelente vídeo.
Gracias por el aporte, muy buen material. Estoy utilizando el procesamiento para determinar diámetros de gota pequeños en imágenes generadas con una cámara de alta velocidad.
Buenas tardes el curso me gustos mucho ya que al tener conocimiento previo explicas muy bien las funciones.
Seguí el curso entero. Muy bueno la verdad. Por cierto, cómo puedo dibujar un cuadrado en lugar de un circulo??
Muchas gracias, me has ayudado mucho con este video, es excelente!
Excelente!!! gracias maestra me salvaste el curso
Excelente, espero que sigas creciendo, me ayudo demasiado, Danke meine Freundin
Maestraa! Me has ayudado mucho
Me salvaste el semestre ❤️
Excelente curso, necesito hacer un programa que detecte formas, en especial una vela, para la aplicación de un sistema de detección de un área menor para así generar una alerta, el problema que tengo es en la segmentación de la imagen, ya que no me segmenta bien y en ocasiones cuando están muy juntas las velas, el regionprops me lo toma como un solo elemento, no se si tienes algún consejo para que esto no pase, muchas gracias.
Toda la parte de procesamiento previo ayudará mucho a modificar la imagen y mejorar la segmentación. Con las modificaciones morfológicas disponibles en MATLAB, saturación de brillo, etc.
estaba buscando eso de los viscircles, aqui mi pregunta va relacionada a poner en una gráfica otro tipo de imagen?, en vez de "viscircles" que es un circulo poner otra figura
Excelente aporte... Una pregunta como podria dividir en sextores y luego segmentarlo en 16x4=64 segmentos para la segmenracion de la imagen ? Gracias
Está la función de Matlab imcrop, sólo hay que meterle las coordenadas para recortar. Si tienes el tamaño de la imagen (número de filas y columnas) vas a poder obtener las coordenadas de cada nueva imagen.
PORFAVOR SIGA CON EL CURSO :(
me gustaron mucho los videos pero me gustaria dialogar para saber darle solucion ha ciertas tareas especificas.
gracias bro, sigue así
Muchas gracias, maestra! Quiero consultar algo, con todos los temas que ya explicaste anteriormente pude hacer el preprocesamiento de la imagen y obtener el histograma de colores de un pie. Mi objetivo es obtener información real para solucionar el problema del pie diabético con plantillas personalizadas. Ya pude obtener la información del histograma, y el último paso es saber el tamaño real del pie en mi imagen estandarizada a 35 cm desde la camara hasta la planta del pie (lo cual ha sido una gran dificultad para encontrar un comando que dé esa información), y a partir de eso tener mi modelo 3D con el tamaño en cm del pie (real), juntando las presión que ejerce el pie (que ya tengo del histograma), hay algún comando que pueda encontrar, o qué me sugieres? Muchas gracias de antemano.
Lo más sencillo sería usar por fuera del algoritmo un sensor de distancia (un ultrasónico por ejemplo), si es mediante el procesamiento de la imagen, se me ocurre por ejemplo encontrar las ROI dentro de la imagen, sus bordes y realizar una especie de mapeo ya con la distancia estandarizada. Que cierto número de pixeles del borde corresponden a x cm. Hay algunas funciones, pero sería cuestión de ver si se puede adaptar a tu imagen. Código tomado de MathWorks:
%Lea la imagen en el espacio de trabajo.
im = imread('foto.png');
%Recopila datos sobre la imagen, como su tamaño, y almacena los datos en una estructura.
sz = size(im);
myData.Units = 'pixels';
myData.MaxValue = hypot(sz(1),sz(2)); myData.Colormap = hot; myData.ScaleFactor = 1;
%Muestre la imagen en un eje.
hIm = imshow(im);
%Especifica una función de devolución de datos. ButtonDownFcn pasa la estructura a la función de devolución de datos. myData es una función de devolución de datos, crea los objetos de línea y comienza a dibujar los ROI.
hIm.ButtonDownFcn = @(~,~) startDrawing(hIm.Parent,myData);
%Cree la función utilizada con la devolución de llamada para crear ROI de línea.ButtonDownFcn Esta función:
1. Crea una instancia de un objeto de ROI de línea.
2. Configura a los oyentes para que reaccionen a los clics y al movimiento del ROI.
3. Agrega un menú contextual personalizado a los ROI que incluye una opción 'Eliminar todo'.
4. Comienza a dibujar el ROI, utilizando el punto en el que se hace clic en la imagen como punto de partida.
function startDrawing(hAx,myData)
% Create a line ROI object. Specify the initial color of the line and % store the |myData| structure in the |UserData| property of the ROI.
h = images.roi.Line('Color',[0, 0, 0.5625],'UserData',myData);
% Set up a listener for movement of the line ROI. When the line ROI moves, the |updateLabel| callback updates the text in the line ROI label and changes the color of the line, based on its length.
addlistener(h,'MovingROI',@updateLabel);
% Set up a listener for clicks on the line ROI. When you click on the line ROI, the |updateUnits| callback opens a GUI that lets you specify the known distance in real-world units, such as, meters or feet.
addlistener(h,'ROIClicked',@updateUnits);
% Get the current mouse location from the |CurrentPoint| property of the axes and extract the _x_ and _y_ coordinates.
cp = hAx.CurrentPoint; cp = [cp(1,1) cp(1,2)];
% Begin drawing the ROI from the current mouse location. Using the |beginDrawingFromPoint| method, you can draw multiple ROIs.
h.beginDrawingFromPoint(cp); % Add a custom option to the line ROI context menu to delete all existing line ROIs.
c = h.UIContextMenu;
uimenu(c,'Label','Delete All','Callback',@deleteAll); end
Te recomiendo leer: la.mathworks.com/help/images/measure-distances-in-images.html
@@mundotecnologico6659 ¡Mucha gracias, Maestra! Aunque el sensor sería en tiempo real, verdad? A mí me interesaría conocer los datos reales en una imagen que ya fue tomada y saber cuánto mide el pie de largo y ancho.
@@ottoluttmann9220 Sí, con esa ayuda podría funcionar. En la página de mathworks.
Muito obrigada 👏👏👏
Me podes orientar como pensar un programa que detecte verde y luego forma y envié una senal. gracias
Para la detección del color verde, aquí quedará una imagen binaria con sólo el color verde, se puede ajustar el umbral de im2bw para que sea más específico con el color verde:
a = imread('Paisaje.jpg');
ag = a(:,:,2);
alogical= im2bw(ag,0.8); % Convertimos a binario
BW = imfill(BW,'holes'); % Rellena los huecoso
Después identifica la forma con el color verde que ya está segmentada en la imagen binaria y la recorta en una imagen más pequeña, dentro del objeto stats ya están todos los datos de las regiones como el centro, el área, etc. Y en I1 está la imagen recortada con la región, suponiendo que sólo es una:
L = bwlabel(BW); % Crea regiones (etiqueta componentes conectados)
numele = max(max(L)); % Número de objetos etiquetados
stats = regionprops(L,'all'); % Estadísticas de las regiones
E = stats(1).BoundingBox; % Toma la frontera de la 1ra región
I1 = imcrop(I,E); % Devuelve la 1ra región
Si quisieras enviar una señal cuando encuentre la forma de color verde, parte de lo anterior tendría que estar dentro de un ciclo if, con la variable numele se puede saber si ha encontrado regiones:
if numele>=1
*** Aquí se ejecutarían las demás instrucciones y al final sólo envías la señal no sé qué tipo de señal por serial o cómo.
end
Espero que te sea de ayuda. Gracias por ver los videos!
Buenas buenas...una pregunta se podría hacer segmentacion de objetos pero de un vídeo
Sí se podría, el truco es analizar imagen por imagen del video de la misma forma e ir desplegando el resultado, como lo hace tan rápido MATLAB se ve fluido como un video
%recorreo todas las monedas y las recorta
for index = 1:numele
informObj = inform(index).BoundingBox; %toma la frontera de la primera region
moneda = imcrop(img, informObj); %devulve la primera region
figure(1), subplot(1,numele,index), imshow(moneda)
end
eres mi idolo
no me agarra la libreria stats
Tal vez sea la versión de matlab, yo tengo 2019