Tarea1 Analisis Digital de Imagenes UNAB 2013

11
UNIVERSIDAD ANDR ´ ES BELLO DEPARTAMENTO DE CIENCIAS F ´ ISICAS Curso: Procesamiento Digital de Im´ agenes Alumno: Eduardo Jeraldo Fecha de entrega 22 de Agosto 2013 Tarea 1 1. Preguntas 1. Se tiene la siguiente imagen (“Santiago 01.jpg”) Figura 1: Santiago 01.jpg a) Separar los tres canales RGB, encontrar los histogramas de cada canal R, G y B. Comente resultados. Si quisi´ eramos solo segmentar las monta˜ nas que habr´ ıa que hacer mirando solo el gr´afico de histograma. b) Graficar el perfil del pixel (para cada canal) para las filas indicadas (aproximada- mente) en la figura anterior. Comente que habr´ ıa que hacer para poder segmentar solo el cerro mirando solo el perfil de pixeles. c) Convierta la imagen en colores en una imagen gris. 2. Usando la imagen anterior (imagen gris obtenida anteriormmiente ) segmentar: a) 128 niveles de gris. b) 64 niveles de gris. c) 2 valores (binarizar ). 1

description

Tarea 1 Analisis digital de imagenes, las preguntas estan contenidas dentro del documento y tambien los codigos usados.

Transcript of Tarea1 Analisis Digital de Imagenes UNAB 2013

Page 1: Tarea1 Analisis Digital de Imagenes UNAB 2013

UNIVERSIDAD ANDRES BELLODEPARTAMENTO DE CIENCIAS FISICAS

Curso: Procesamiento Digital de ImagenesAlumno: Eduardo Jeraldo

Fecha de entrega 22 de Agosto 2013

Tarea 1

1. Preguntas

1. Se tiene la siguiente imagen (“Santiago 01.jpg”)

Figura 1: Santiago 01.jpg

a) Separar los tres canales RGB, encontrar los histogramas de cada canal R, G y B.Comente resultados. Si quisieramos solo segmentar las montanas que habrıa quehacer mirando solo el grafico de histograma.

b) Graficar el perfil del pixel (para cada canal) para las filas indicadas (aproximada-mente) en la figura anterior. Comente que habrıa que hacer para poder segmentarsolo el cerro mirando solo el perfil de pixeles.

c) Convierta la imagen en colores en una imagen gris.

2. Usando la imagen anterior (imagen gris obtenida anteriormmiente) segmentar:

a) 128 niveles de gris.

b) 64 niveles de gris.

c) 2 valores (binarizar).

1

Page 2: Tarea1 Analisis Digital de Imagenes UNAB 2013

3. Usando los 255 valores de gris (imagen gris original) se pide:

a) Reducir la dimension de imagen a la mitad, sin perder informacion visual es decirde tal forma que se puedan aun distinguir los elementos mas importantes de laimagen.

b) Reducir en forma “inteligente” por ejemplo cada cuatro pixeles encontrar la mediay reemplazar por esa media.

c) Comparar resultados y comentar.

4. Se tiene la siguiente imagen (“Santiago 02.jpg”)

Figura 2: Santiago 02.jpg

Se quiere publicar en un periodico de poco presupuesto, para cada canal haga unproceso de halftoning o dithering (elegido por usted) y luego obtenga una imagen encolores indicando que proceso realizo. Comente resultados.

2

Page 3: Tarea1 Analisis Digital de Imagenes UNAB 2013

2. Solucion

1. Haciendo un analisis con otro programa (“GIMP”), pude encontrar la ubicacion de lalineas rojas. Primera linea 90 o 91 pixel, segunda linea 556 o 557 pixel y tercera linea851 o 852 pixel. Esta informacion la usaremos mas adelante.

a) Primero separamos la imagen por canal.

Figura 3: img r.png Figura 4: img g.png

Figura 5: img b.png

Para realizar la separacion por capasrecordamos que Matlab reconoce una imagencomo una matriz de “f” filas, “c” columnas y“l” capas, entonces cargamos la imagen y laseparamos asignandoles valores especificos ala capa “l” (1,2,3 = R,G,B) y creamos cada

imagen en escala de grises.

Luego usando “imhist” podemos ver el histograma para cada imagen en su res-pectivo filtro (R,G o B).

3

Page 4: Tarea1 Analisis Digital de Imagenes UNAB 2013

Figura 6: histimg r.png Figura 7: histimg g.png

Figura 8: histimg b.png

Los histogramas suguieren que la imagentiene bastante pixeles oscuros, ya que lamayoria de los pixeles se agolpan en los

valores de pixeles mas bajos, eso implica quela imagen en si es un poco oscura.

Luego si quisieramos segmentar las montanas mirando solo los historiales de losfiltros, tenemos que notar que las montanas estan ubicadas en la parte que tienelos pixeles mas claros, entonces tenemos que crear un filtro que solo deje pasarlos valores altos, pero no los mas altos ya que estaria tomando tb el cielo y todaslas nubes, nuestro fitro estara entonces entre 200 y 250.

for i =1: f { for j =1: c { for k=1: li f img ( i , j , k)>200 && img ( i , j , k ) < 250mon( i , j , k ) = img ( i , j , k ) ;

endend } end } end

4

Page 5: Tarea1 Analisis Digital de Imagenes UNAB 2013

Finalmente la imagen quedara como:

Figura 9: mon.png

b) Ahora usamos la informacion que encontramos haciendo uso del programa “GIMP”y graficamos los perfiles de pixel para cada linea.

Figura 10: perfcord.png Figura 11: perfcerr.png

5

Page 6: Tarea1 Analisis Digital de Imagenes UNAB 2013

Figura 12: perfciud.png

Nuevamente los perfiles suguieren que en laparte de montanas los pixeles son mas claros,

eso avala el uso de lo encontrado por loshistogramas.

c) Para convertir la imagen en una imagen de grises tenemos 2 opciones claras, laprimera seria usar los comandos de Matlab (rgb2gray) o usar la formula mostradaen clases gray = 0,299 ∗ R + 0,587 ∗ G + 0,114 ∗ B, usando el metodo mostradoen clases obtenemos:

Figura 13: img gris.png

6

Page 7: Tarea1 Analisis Digital de Imagenes UNAB 2013

2. Para segmentar los niveles de color (de gris en este caso), podemos “dividir” la imagenpor valores especificos para que el valor final maximo corresponda al valor de segmen-tacion deseado.

a) Para 128 niveles de gris dividimos la imagen en 2, debido a que 256/2 = 128, peroesto nos deja como valor maximo de pixel el 128 y el valor maximos debe ser 127,matlab aproxima hacia arriba y necesitamos que aproxime hacia abajo, por esousamos:

img_gris128=uint8(double(img_gris / 2)-1.5);

Al convertir los valores de la matriz en Double nos aseguramos que matlab con-servara los decimales, luego restamos 1.5 a cada pixel y asi aseguramos que alconvertir en uint8 aproximara hacia arriba y los valores maximos seran de 127.Finalmente la imagen en 128 niveles de gris es:

Figura 14: img gris128.png Figura 15: img gris64.png

b) Hacemos lo mismo para la obtener la imagen anterior de 64 niveles de gris, soloque ahora dividimos por 4.

img_gris64=uint8(double(img_gris / 4)-1.5);

c) Para la imagen de 2 colores o imagen binaria, debemos escoger el valor al cualvamos a separar los colores, hacemos un estudio del historial de la imagen paraencontrar la moda de los pixeles y en base a este valor binarizamos de la siguientemanera:

[ y ( : , 1 ) , y ( : , 2 ) ] = imhi s t ( i m g g r i s ) ; m=max( y ( : , 2 ) ) ; n=max( y ( : , 1 ) ) ;for i =1:m

i f y ( i , 1 ) == n ;med=y ( i , 2 ) ;

endend

7

Page 8: Tarea1 Analisis Digital de Imagenes UNAB 2013

Luego binarizamos para obtener:

Figura 16: img gris2.png

3. Ahora usamos la imagen de 255 valores de gris para redimensionarla.

a) Usando el comando de Matlab (imresize) podemos especificar cuando queremosredimensionar la imagen, en este caso a la mitad.

b) Para redimensionar de forma inteligente como se senala en el enunciado, desarro-llamos la siguiente linea de codigo:

I =1; J=1;for i =1:2 : f−2

for j =1:2 : c−2img rez2 ( I , J)=uint8 (mean ( [ double ( i m g g r i s ( i , j ) ) ; . . .

double ( i m g g r i s ( i +1, j ) ) ; double ( i m g g r i s ( i , j +1)) ; . . .double ( i m g g r i s ( i +1, j + 1 ) ) ] ) ) ;

J=j /2+0.5;endI=i /2+0.5;

end

8

Page 9: Tarea1 Analisis Digital de Imagenes UNAB 2013

c) Finalmente las imagenes redimensionadas son la siguientes:

Figura 17: img rez1.png Figura 18: img rez2.png

El problema que se puede observar con el metodo inteligente es que nos agrega unalinea negra en algunos bordes, pero fuera de eso las imagenes son casi parecidas,de hecho la siguiente imagen muestra la diferencia entre la imagenes.

Figura 19: dif rez.png

9

Page 10: Tarea1 Analisis Digital de Imagenes UNAB 2013

4. Ahora debemos escoger entre un halftoning o un dithering para la imagen (“Santia-go 02.jpg”). Como no encontre una forma que me dejara satisfecho c/r a la calidad dela imagen final, o que hiciera el dithering o halfotoning para imagen en RGB no lleguea una conclusion para esta parte, pero adjunto una de las rutinas que me genera undithering para imagen RGB.

function D = Floyd Ste inbe rg D i the r ing (G)switch s ize (G, 3 )

case 1G = double (G) ; % conver t the o r i g i n a l image from uni t8 to doub leD = zeros ( s ize (G) ) ; % i n i t i a l i z e d i t h e r ed image D[M,N] = s ize (G) ; % ex t r a c t s i z e in format ion o f the o r i g i n a l imagefor r = 1 :M

i f mod( r , 2 ) == 0 % scan p i x e l from l e f t to r i g h tcOrder = 1 :N;d i r e c t i o n = ’ l 2 r ’ ;

else % scan p i x e l from r i g h t to l e f tcOrder = N: −1 :1 ;d i r e c t i o n = ’ r 2 l ’ ;

endfor c = cOrder

tP = G( r , c ) ; % current p i x e l i n t e n s i t y% p ick neare s t i n t e n s i t y s c a l e two op t i ons 0 or 255i f tP>=128 % c l o s e to 255

D( r , c ) = 255 ; % pick 255else % c l o s e to 0

D( r , c ) = 0 ; % pick 0endeP = tP−D( r , c ) ; % d i f f e r e n c e b e f o r e and a f t e r s e l e c t i o n% d i f f u s e d i f f e r e n c e eP to ne ighbor p i x e l si f r˜=M % dea l wi th none bottom rows

switch d i r e c t i o ncase ’ l 2 r ’

i f c == 1 % l e f t −most p i x e l caseG( r , c+1) = G( r , c+1)+eP∗7/13;G( r +1,c ) = G( r +1,c)+eP∗5/13;G( r +1,c+1) = G( r +1,c+1)+eP∗1/13;

e l s e i f c == NG( r +1,c ) = G( r +1,c)+eP∗5/8 ;G( r +1,c−1) = G( r +1,c−1)+eP∗3/8 ;

else % the normal caseG( r , c+1) = G( r , c+1)+eP∗7/16;G( r +1,c ) = G( r +1,c)+eP∗5/16;G( r +1,c+1) = G( r +1,c+1)+eP∗1/16;G( r +1,c−1) = G( r +1,c−1)+eP∗3/16;

10

Page 11: Tarea1 Analisis Digital de Imagenes UNAB 2013

endcase ’ r 2 l ’

i f c == N % r igh t−most p i x e l caseG( r , c−1) = G( r , c−1)+eP /2 ;G( r +1,c ) = G( r +1,c)+eP∗3/8 ;G( r +1,c−1) = G( r +1,c−1)+eP∗1/8 ;

e l s e i f c == 1 % l e f t −most p i x e l caseG( r +1,c ) = G( r +1,c)+eP∗5/8 ;G( r +1,c+1) = G( r +1,c+1)+eP∗3/8 ;

else % normal caseG( r , c−1) = G( r , c−1)+eP∗7/16;G( r +1,c ) = G( r +1,c)+eP∗5/16;G( r +1,c−1) = G( r +1,c−1)+eP∗1/16;G( r +1,c+1) = G( r +1,c+1)+eP∗3/16;

endend

else % dea l wi th the bottom rowswitch d i r e c t i o n

case ’ l 2 r ’i f c ˜=N % normal case

G( r , c+1) = G( r , c+1)+eP ;end

case ’ r 2 l ’i f c ˜= 1 % normal case

G( r , c−1) = G( r , c−1)+eP ;end

endend

endendotherw i s e

for i = 1 : s ize (G, 3 )tD = Floyd Ste inbe rg D i the r ing (G( : , : , i ) ) ;D( : , : , i ) = tD ;

endend

D = uint8 (D) ; % conver t doub le D to u in t8

11