Interfaz grafica para comparar resultados de procesado de imágenes

A partir de ahora en adelante representaremos mediante una interfaz gráfica en matlab la imagen original junto con la imagen tras realizar el procesamiento adecuado. Para ello necesitaremos crear una interfaz gráfica en Matlab que nos permita cargar una imagen y procesarla como nosotros queremos de forma muy dinámica utilizando dos botones.

Para ello abrimos matlab y seleccionamos file->new->GUI y pulsamos ok
A continuación se nos abre una nueva ventana:
Con el botón indicado en la figura creamos dos ventanas una a la izquierda y otra a la derecha y posteriormente creamos dos botones tal y como se indica en la figura de abajo:

A continuación con el botón derecho del ratón, seleccionamos el button y pinchamos en property inspector.
Posteriormente en la parte de inferior de este menú cambiamos los campos String por Cargar Imagen y Tag por cargarimagen para el botón de la izquierda y para el de la derecha cambiamos los campos String por Procesar Imagen y Tag por procesarimagen.

Por último seleccionamos un botón con el botón derecho y entramos en viewcallbacks->callback, guardamos el fichero y se nos abrirá el editor de matlab.

En su interior buscamos la parte donde pone:

% --- Executes just before GuiBasica is made visible. function GuiBasica_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to GuiBasica (see VARARGIN)


% Choose default command line output for GuiBasica handles.output = hObject;

%Agregar variable para almacenar imágenes
handles.myImage = [];

% Update handles structure guidata(hObject, handles);

Y añadimos las lineas rojas del comando.
Posteriormente buscamos más abajo la parte:

% --- Executes on button press in CargarImagen. function cargarimagen_Callback(hObject, eventdata, handles)
% hObject    handle to CargarImagen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
try
    [filename,pathname] = uigetfile('*.pgm','Selecciona imagen para abrir');


    if isequal(filename,0)
        %no hace nada
    else
        handles.myImage = imread(fullfile(pathname, filename));


        [X, myMap] = gray2ind(handles.myImage);
        mImagen2 = ind2rgb(X,myMap);


        image(mImagen2, 'Parent', handles.axes1);
        colormap(gray);
    end
    guidata(hObject, handles);
catch
    msgbox('Error')
end


Y de nuevo añadimos las sentencias que tenemos en rojo.

Por último buscamos la parte del botón procesarimagen:

% --- Executes on button press in ProcesarImagen. function ProcesarImagen_Callback(hObject, eventdata, handles)
% hObject    handle to ProcesarImagen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
    guidata(hObject, handles);
    mImage = handles.myImage;   
    mImage2 = 255-mImage;
    [X, myMap] = gray2ind(mImage2);
    mImagen2 = ind2rgb(X,myMap);


    image(mImagen2, 'Parent', handles.axes2);

Y añadimos las sentencias que están escritas de color rojo.

Con esto si utilizamos nuestra interfaz con una imagen.pgm (puesto que es así como lo he indicado en la función cargar imagen ) obtenemos el resultado que mostramos a continuación:



7 comentarios:

  1. Amigo, a mí me marca error y seguí tus pasos al pie de la letra! :D quizá hay detalle porque le cambie .pgm a .jpg. Aunque la verdad lo dudo!

    ResponderEliminar
  2. Si quieres mandame al gmail o por aqui comenta que error te da a ver si te puedo ayudar!

    ResponderEliminar
  3. Listo! Gracias bro! Pero pude arreglar el problema! ;) Buen día!

    ResponderEliminar
    Respuestas
    1. Hola, como pudiste arreglar el error?

      Eliminar
    2. Como se arregla el error? Necesito ingresar una imagen jpg

      Eliminar
    3. Tengan en cuenta que tienen que utilizar imágenes a color, no imágenes que ya estén en escala de grises. Realmente no me acuerdo de cual error hablaba porque fue hace un año y no tengo instalado el MATLAB para probar, pero deja leo el código y les mando algo.

      ///////Botón cargar.. y la función


      % --- Executes on button press in botoncargar.
      function botoncargar_Callback(hObject, eventdata, handles)
      % hObject handle to botoncargar (see GCBO)
      % eventdata reserved - to be defined in a future version of MATLAB
      % handles structure with handles and user data (see GUIDATA)
      [filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.gif';'*.*'}, 'Elija su imagen a procesar');%Elejimos la imagen y los tipos
      imagen = imread([pathname,filename]);%leemos la imagen
      axes(handles.imagenAxe1);%Dibujamos la imagen en el axe imagenAxe1-
      imshow(imagen);%Mostramos la imagen
      handles.imagen = imagen;
      guidata(hObject, handles);



      ///Boton procesar y su funcion

      % --- botonProcesar
      function botonProcesar_Callback(hObject, eventdata, handles)
      % hObject handle to botonProcesar (see GCBO)
      % eventdata reserved - to be defined in a future version of MATLAB
      % handles structure with handles and user data (see GUIDATA)

      imgGray = rgb2gray(imagen);%la variable donde guardamos la imagen cargada se llama imagen
      bw = im2bw(img_crop,graythresh(imgGray));
      BMejor=bwareaopen(bw,30);%Encuentra pixeles desconectados y los elimina
      axes(handles.imagenbinaria);
      imshow(BMejor);

      Eliminar
  4. Bro, necesito de tu ayuda ya que me marcas error al ingresar el código, espero que me puedas auxiliar, ya te mande un correo

    ResponderEliminar