Matlab - MATLAB: imshow no se muestra.

 
Vista:

MATLAB: imshow no se muestra.

Publicado por Kevin Martinez G. (2 intervenciones) el 08/09/2018 04:50:31
Hola compañeros espero se encuentren muy bien.
El motivo de esta consulta es saber si alguno de ustedes tiene idea de porque se está presentando la siguiente situación con un Script que tengo para ejecución en MATLAB: Es un script para realizar un procesamiento de imagenes en el cual debo delimitar un objeto de color rojo. La cuestión es que cada frame capturado por la camara se procesa y se muestra inmediatamente, generando la sensación de movimiento (como si fuese un video). Especificamente en la línea 69 del código que agrego más abajo, es donde se muestra la imagen consecutivamente en el ciclo while infinito. El problema que he tenido es que, aunque suene extraño, antes si me mostraba las imagenes consecutivamente dando la sensación de video, pero justo ahora (luego de realizar algunas modificaciones al código) definitivamente no me muestra las imagenes, apenas ejecuto el script, no se abre ninguna ventana de imagen.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
clear all, close all, clc
 
    % VARIABLES
 
% DECLARACION
global alto; % Valor de alto (cantidad de pixeles) de los rectangulos
global ancho; % Valor de ancho (cantidad de pixeles) de los rectangulos
global contador; % Variable para definir la duracion de los rectangulos en sus posiciones
global totalFiguras;
global coloresFiguras;
global posicionesAleatorias;
global se; % Elemento estructurante para operaciones morfologicas
global cform; % Variable para almacenar el modelo de color CMYK
 
% DEFINICION
 
    % Se divide el area de video en una cuadricula de 10x10
alto = 60; % 600/10
ancho = 80; % 800/10
 
contador = 0;
totalFiguras = 5;
coloresFiguras = ['r','g','b','y','c'];
se = strel('disk', 20);
cform = makecform('srgb2cmyk');
 
    % VIDEO
video = videoinput('winvideo', 1, 'MJPG_800x600');
% 320x240, 640x360, 640x480, 800x600
video.FramesPerTrigger = inf; % Adqusicion continua de frames
video.ReturnedColorSpace = 'rgb'; % Formato de color de la entrada de video
video.FrameGrabInterval = 1; % Se almacenan todos los frames : 15FPS
start(video) % Se inicia el proceso de adquisicion de frames
 
flag = 1;
while(flag == 1)
 
    captura = getdata(video, 1); % Se obtiene la imagen desde el buffer de datos del objeto de entrada de video
    captura = flip(captura, 2); % Invierte las filas de la matriz / Efecto espejo
 
        % PROCESAMIENTO DE LA IMAGEN
 
    % RED
    red = imsubtract(captura(:,:,1), rgb2gray(captura)); % Capa R del modelo RGB
    cmyk = applycform(captura, cform); % Obtencion de imagen en modelo CMYK
    magenta = cmyk(:,:,2); % Capa M (Magenta) del modelo CMYK
    baseImage = imadd(red, magenta); % Se obtiene un destacamiento de los niveles de rojo en la imagen
 
    % REDUCCION DE RUIDO
    baseImage = medfilt2(baseImage); % Proceso de filtrado medio a la imagen base para reducir el ruido
 
    % BINARIZACION
    level = 0.999; % Umbral
    imagebw = im2bw(baseImage, level); % Obtencion de imagen binaria
 
    % REFINADO DE OBJETOS
    imagebw = bwareaopen(imagebw, 1000);
    % Se remueven los objetos pequeños de la imagen binaria obtenida: Objetos con menos de 1000 bits.
    imagebw = imclose(imagebw, se); % Operacion morfologica de cierre
 
    % ETIQUETADO DE OBJETOS
    imagebw = bwlabel(imagebw, 4);
    objetos = regionprops(imagebw, 'BoundingBox', 'Centroid');
 
 
        % CONFIGURACION DE PANTALLA
 
    % MOSTRAR IMAGEN
    imshow(captura);
    hold on; % Sobreescribir pantalla
 
    % Cada 2 sec: Cambiar los recuadros de posiciones
    if contador == 30
        contador = 0;
    end
 
    if contador == 0
        posicionesAleatorias = generarCoordenadasRectangulos(totalFiguras, alto, ancho, 10);
    end
 
    % Dibujar los rectangulos
    for i=1:totalFiguras
        rectangle('Position', [posicionesAleatorias(i,1),posicionesAleatorias(i,2),ancho,alto],...
        'Curvature', [0, 0],...
        'EdgeColor', coloresFiguras(i),...
        'LineWidth', 1,...
        'FaceColor', coloresFiguras(i),...
        'LineStyle', '-');
    end
 
    % Delimitar Objeto
    if(length(objetos) > 0)
        delimitador = objetos(1).BoundingBox;
        centroide = objetos(1).Centroid;
        rectangle('Position', delimitador, 'EdgeColor', 'r', 'LineWidth', 2);
        plot(centroide(1), centroide(2), '+');
    end
hold off;
%flag = 0;
contador = contador + 1;
end % Fin del while
 
stop(video); % Detener el proceso de adquisicion de frames
flushdata(video); % Remover datos del buffer de memoria del objeto de entrada de video
delete(video);

La siguiente es una advertencia que me aparece al ejecutar el codigo:
Warning: Image is too big to fit on screen; displaying at 67%
> In images.internal.initSize (line 71)
In imshow (line 305)

Cabe aclarar que reemplazando la línea 69 por : imshow(imresize(captura, 0.67)) ajustando el tamaño de la imagen, esta sigue sin mostrarse.

Agradezco si alguno sabe a que puede deberse la situación. Muchas gracias.
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

MATLAB: imshow no se muestra.

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/09/2018 04:55:03
Bueno si el resto de cosas están bien con un figure antes del while deberías solucionar el problema, es decir, agrega antes del while una línea que diga figure

1
figure;
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

MATLAB: imshow no se muestra.

Publicado por Kevin Martinez G. (2 intervenciones) el 08/09/2018 05:06:33
Hola amigo, gracias por tu respuesta. Lo he intentado y basicamente me muestra una única captura tomada con la camara. La idea es que, como el código es para un juego en el que aparecen unos recuadros de colores y se deben golpear con un objeto de color rojo, el muestreo de frames debe ser continuo, como si fuese un video.
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 JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

MATLAB: imshow no se muestra.

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/09/2018 05:17:03
Bueno eso depende mucho del computador también con una pausa antes de que finalice el while, agrega una pause muy corta y despreciable

es decir :

1
pause(0.0000001)
end % Fin del while

si no te funciona escríbeme y te puedo ayudar sin problemas
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