Jugando con perfiles e histogramas en imágenes de Matlab

Entregar reporte de resultados, DE ESTA ENTRADA, antes del 19  de septiembre  2012

Las imágenes de prueba están en C:\MATLAB\toolbox\images\imdemos
Pruebe las siguientes funciones:
           
imagen bacteria, archivo
en escala de grises
X = imread('bacteria.jpg','JPG');     % probar al menos tres imágenes distintas
image(X);
colormap(map);
colormap(hot); colorbar;
pause
image(X);
liney=X(:,100);     % column profile (vert)
linex=X(60,:);       % row profile (horiz)
hold on; plot(linex);



Resultado de la primera rutina
1. Pruebe otros perfiles sin exceder las dimensiones de la imagen (recordar “size(X)”) e interprete dichos perfiles en función de la imagen

2.  Los valores de gris de los píxeles de una imagen son una población cuya distribución (frecuencia) permite caracterizar ciertas propiedades de la imagen, sin preservar información espacial (aunque depende de dónde se toman las muestras.   Pruebe las funciones de histograma de una señal, pero ahora en una imagen.   Implemente usted su propia función para calcular un histograma y grafiquelo en diferentes escalas.

Sugerencia (ejercicio: corregir índices definiendo por ejemplo H como subvector de otra matriz ):

% X se define como arriba:  una matriz que contiene la imagen.
H=zeros(256,1);    % iniciar vector de histograma a 0
[m,n] = size(X);    % obtener dimensiones
for i=1:m
  for j=1:n
     H(X(i,j)+1) = H(X(i,j)+1)+1;   % usar datos como direcciones para contra frecuencias
  end
end
plot(H);

3.  Calcule ahora su histograma en escala logarítmica, muestreando la imagen de manera uniforme; pruebe la función random.   Observe los detalles del histograma y pruebe otras escalas.  Comente sus observaciones.

4.  Si N es el total de pixeles, y se muestrean M. Calcule histograma de zonas de interés (un rectángulo que contenga las bacterias, por ejemplo).  Compare con histogramas del fondo en distintas áreas.  ¿Cómo se relacionan con el histograma global?   Repita 4. para una zona de interés (no del fondo).  

6. Compara la implementación de arriba con las funciones de histograma predefinidas en Matlab (úselas).

7.  Aumente el intervalo dinámico de los valores de gris (o sea el contraste) usando la información del histograma (recordar lo que se vio en clase), en uno global y en dos locales.  Para esto será necesario modificar los valores de gris de acuerdo al histograma.

8.   ¿Cómo definir y almacenar  su propia paleta de colores?  Diseñe una que vaya de café obscuro a color crema y de crema azul claro, de azul claro a verde.

Cómo transformar una figura de Matlab en una imagen portable.




Resumen
En esta ocasión se muestran las bases para que nuestras figuras en Matlab se exporten como archivos de imagen y se puedan incorporar en un procesador de textos.
Básicamente, existen cuatro caminos para exportar:

1) El copy-page; en la barra de menús de la imagen, damos clic en Edit y luego en Copy figure. Ya después podemos pegar nuestra información en otro programa, tal vez powerpoint.

2) Salvar como. Utilizando la interface gráfica de la figura Matlab, podemos cómodamente salvar nuestra figura en diversos formatos de imagen (png, pdf, jpg, etc.). Únicamente hay que seguir las instrucciones

3) Uso del comando print. Este comando es muy versátil y permite guarda las imágenes en varios formatos, controlar la calidad de pdi de la imagen e incluso automatizar el proceso de guardar-nombrar archivos. Además de ser el de mayor calidad. Mejor aún, utilizando previamente los comandos:

Set(gcf, ‘InvertHardcopy’, ‘off’)

Así, se preserva el color del fondo que nosotros escogimos previamente para la figura.

4) Impresión de pantalla. En el video omitimos esta opción para salvar las imágenes, pues no es propio de Matlab. El botón de ImprPant es muy general y depende de la resolución de tu monitor, suele mostrar elementos innecesarios que se deberían de corregir en un programa que manipule imágenes. Cuando se trabaja con muchas imágenes y se busca la mejor calidad, este camino se debe evitar

Contar con gráficas de alta calidad visual y de datos es vital para que nuestra publicación, tesis o trabajo escolar sea aprobado por los revisores; por ello no se debe descuidar la presentación de nuestras imágenes.

Preguntas para pensar
1) ¿Qué determina que la imagen sea de alta calidad?
2) ¿Por qué usar 300 dpi en esta clase de imágenes?, ¿Siempre es así?

Ejercicios
1) Introduzca en un ciclo for el comando print, de modo que obtenga 10 imágenes secuenciadas de una senoidal a la que se le varia la frecuencia o la amplitud.

Juntas, pero no revueltas: sub-gráficas en una misma figura de Matlab

Ejemplo del uso de subplot
El comando de Matlab subplot es lo suficientemente versátil para darle sendos ejes y características adicionales a las gráficas que coloquemos en una misma imagen.

Efectivamente, basta con indicar como se compondrá la matriz de la imagen (a,b) y que espacio p ocupará cada una de las gráficas; es decir, subplot (m, n, p) hace la división del espacio de la figura. Matlab asignara el espacio con en paneles regulares para cada gráfica. Este es un ejemplo simple de una rutina aplicada una figura compuesta de 2 gráficas.

Asignación simple de paneles
x= 1:0.1:2*pi;
subplot(2,1,1), plot(x)
subplot(2,1,2), plot(sin(x))

En general, el comando subplot brinda una figura de configuración simétrica de paneles, que son donde se colocan las gráficas. Y cada panel es independiente de los otros. Sin embargo, si el parámetro p es una matriz, entonces se puede ocupar más de un panel para una gráfica. Por tanto, en una misma figura se puede colocar una gráfica grande y otras más pequeñas. Por ejemplo usando el siguiente código:


Asignación asimétrica de paneles
x= 1:0.1:2*pi;
subplot(2,2,[1 2]); plot(sin(x))
subplot(2,2,3); plot(log(x))
subplot(2,2,4); plot(exp(x))

Finalmente, hay que destacar que se puede utilizar el subplot dentro de ciclos de programación, de forma que se pueden automatizar colecciones de imágenes que siguen una línea de historica. Por ejemplo:




Ejemplo del uso de  subplot
en un ciclo for
y = zeros(4,15); % se inicializa un vector, para ser más eficiente
for k = 1:4 % seran cuatro colecciones de datos
y(k,:) = rand(1,15); % se crea un vector de 15 elementos aleatorios
subplot(2, 2, k) % el índice se usa para dar orden a la secuencia de gráficas
plot(y(k,:)); % se hace la gráfica
end

Precauciones
Utilizando scripts, solamente se pueden crear estas gráficas cuando ya se cuenta con la matriz completa. En otro caso hay que utilizar comandos como drawnow, del que ya anteriormente hemos mostrado unos ejemplos.

Preguntas para pensar
1) Describa un ejemplo especifico donde los subplot en un ciclo for son aplicados


Ejercicios
1) Obtenga la siguiente imagen utilizando diferentes comandos de Matlab

Ejercicio de esta entrada

Related Posts Plugin for WordPress, Blogger...