Matlab - Manipulación Frame Video - GUI Matlab

 
Vista:

Manipulación Frame Video - GUI Matlab

Publicado por Esteban Saavedra (1 intervención) el 03/11/2014 16:32:29
Buenos Días,

Actualmente me encuentro desarrollando un proyecto en el cuál por medio de una Interfaz Gráfica en MATLAB se debe tomar el video en tiempo real y a este se le debe aplicar lo siguiente:

Visualizacion:
RGB, CMY, HSI, Gray, Negativo, Reduccion de colores, Espectro

Filtros:
Gamma, Average, Laplaciano

Ruido:
Gaussiano, Salt & Pepper, Frecuencia

Mascaras:
Glaoucoma Tunel(Cetro claro, extremos oscuros)
Glaocoma Central(Centro Oscuro, Extremos Claros)
Retinopatia Diabetica(Manchas Oscuras)

Los codigos para cada uno de estos casos ya los he realizado y estan funcionando de manera correcta(archivo .m para cada caso), entonces para este proyecto se debe realizar un menu en GUI para realizar lo anteriormente mencionado. La afectacion del video se debe hacer en tiempo real, es decir, si tengo el video en RGB al seleccionar un botón que me transforme la imagen a escalas de Grises, el cambio debe ser inmediato, y así con los demás.

Sin embargo al tratar de iniciar el video y aplicar alguno de los efectos el video se detiene, y solo afecto un frame

Este es el código que Inicia el video

function IniciarVideo_Callback(hObject, eventdata, handles)

fps = 20;
%hFigure = figure;
set(0,'DefaultFigureMenu','none');
vid=videoinput('winvideo',1,'YUY2_160x120');
set(vid,'FramesPerTrigger',1);
set(vid,'Triggerrepeat',Inf);
set(vid,'ReturnedColorSpace','rgb');
triggerconfig(vid, 'Manual');
TimerData=timer('TimerFcn', {@FrameRateDisplay,vid},'Period', 1/fps,'ExecutionMode','fixedRate','BusyMode','drop');
% Función de Timer Data: Solo es un timer para saber cuando se ha tomado un frame en el video y ejecuta la funcion FrameRateDisplay
%
start(vid);
start(TimerData);
trigger(vid);
%uiwait(hFigure);
stop(TimerData);
delete(TimerData);
stop(vid);
delete(vid);
clear functions;

function FrameRateDisplay(obj, event, vid)
persistent frame;
persistent field1;
trigger(vid);
frame=getdata(vid,1,'uint8');
if isempty(field1)
field1=imshow(frame);
title('Imagen Original');
else
set(field1, 'CData',frame);
end

Y este es el codigo de uno de los efectos realizados(sería igual p'ara cada uno de los efectos)

function Grises_Callback(hObject, eventdata, handles)

fps = 20;
%hFigure = figure;
set(0,'DefaultFigureMenu','none');
vid=videoinput('winvideo',1,'YUY2_160x120');
set(vid,'FramesPerTrigger',1);
set(vid,'Triggerrepeat',Inf);
set(vid,'ReturnedColorSpace','rgb');
triggerconfig(vid, 'Manual');
TimerData=timer('TimerFcn', {@FrameRateDisplay,vid},'Period', 1/fps,'ExecutionMode','fixedRate','BusyMode','drop');
start(vid);
start(TimerData);
uiwait(figure);
stop(TimerData);
delete(TimerData);
stop(vid);
delete(vid);
clear functions;

function FrameRateDisplay(obj, event, vid)
persistent frame;
persistent LowBitImage;
persistent ImageGray;
persistent field1;
persistent field2;
trigger(vid);
frame=getdata(vid,1,'uint8');
rsImage=rgb2gray(frame);
if isempty(field1)
subplot(121);
field1=imshow(frame);
title('Imagen Original');
subplot(122);
field2=imshow(rsImage);
title('imagen Modificada');
else
set(field1, 'CData',frame);
set(field2, 'CData',rsImage);
end

Agradecería la ayuda para tratar de corregir el problema de la ejecución del video, y que cuando seleccione algun efecto se vea reflejado inmediatemente sobre el frame del video, ya que he intentado iniciar el video en cada boton, con case para saber que boton eleji y realizar la operacion, pero no hay mucho avance.

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