procesamiento digital en matlab
TRANSCRIPT
CURSO : LABORATORIO DE PROCESAMIENTO
DIGITAL DE IMAGENES
TRABAJO CALIFICADO #04
TEMA :
PROCESAMIENTO DIGITAL EN MATLAB
ALUMNOS : CARBAJAL ARELA REYNALDO
FLOREZ TAPIA JOSE ALEJANDRO
CHUCHULLO TITO, JAVIER
MAMANI CCASA, WALTER
MATTA HERNANDEZ JORGE
SARCO MONTIEL MIGUEL
ZAFERZON QUIROZ VICTOR
NUÑEZ CCOSCCO BOOZ
DOCENTE : ING. LIZARDO PARI
Practica 4
PROCEDIMIENTO
1.- Leer Y Mostrar Una Imagen.
Lea y muestre la imagen ¨rice.png¨
>> i1=imread('C:\Users\alex\Documents\MATLAB\imagenes\rice.png');
>> imshow(i1)
2.- Estimar los píxeles de fondo.
En la imagen de muestra, la iluminación del fondo es mas brillante en el centro de la imagen que en la parte inferior. en este paso el ejemplo utiliza una operación apertura morfológica para estimar la iluminación de fondo. Una apertura es una erosión seguida de una dilatación , usando l mismo elemento de estructuración para ambas operaciones . la abertura morfológica tiene el efecto de remover objetos que no pueden contener totalmente el elemento de estructuración
Explicar que es lo que sucede con el siguiente comando:
>> background = imopen(i1,strel('disk',15)); abertura morfológica en el elemento estructural en forma de disco donde su radio es de 15
>> figure(2)
>> imshow(background)
3.- Vista de la aproximación de fondo como una superficie.
Utilizar comando surf
>> figure(3)
>> surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
010
2030
40
0
10
20
30
400
50
100
150
200
250
Invertimos la escala.
010
2030
40
0
10
20
30
40
0
50
100
150
200
250
Interprete en sus palabras la aproximación superficial analizada:
Los tonos de intensidad del fondo de la imagen pero solo se muestra uno de los ocho pixeles en cada dirección; de otro modo el diagrama superficial sería demasiado denso, cada zona rectangular de la grafica muestra un píxel.
Esto se realiza mediante el comando “surf” y solo tomamos uno de los ocho píxeles con el comando “double(background(1:8:end,1:8:end))”.
4.- Crear una imagen con un fondo uniforme.
Para crear fondo mas uniforme
>> i2 = imsubtract(i1,background);
Imsubtract ¿Cómo es que funciona este comando, que parametros tiene?
Resta la constante de la imagen o dos imágenes,.
Z = IMSUBTRACT(X,Y)
substrae cada elemento en la serie Y del el elemento correspondiente en la serie X e ingresos la diferencia en el elemento correspondiente de la serie del rendimiento Z. X y Y son reales, series numéricas del mismo tamaño, o Y es un doble escalar.
>> figure(4)
>> imshow(i2)
5.- Ajuste del contraste en la imagen procesada.
Luego de la substracción la imagen tiene un fondo uniforme pero ahora esta muy oscura usar imadjust para ajustar el contraste de la imagen
>> i3=imadjust(i2,[0 0.4],[]);
>> figure(5)
>> imshow(i3)
¿Qué parámetros tiene el comando imadjust?
g = imadjust(f, [low_in high_in], [low_out high_out], gamma)
El valor de intensidad de los píxeles de una imagen es cambiado siguiendo las siguientes gráficas, que dependen del valor de gamma. Si gamma se omite se toma por 1. Si high_out es menor que low_out, se invertirá la intensidad de salida con respecto a la imagen original.
6.- Crear una versión binaria de la imagen.
>> level=graythresh(i3);
>> bw=im2bw(i3,level);
>> figure(6)
>> imshow(bw)
>> whos
Name Size Bytes Class Attributes
background 256x256 65536 uint8
bw 256x256 65536 logical
i1 256x256 65536 uint8
i2 256x256 65536 uint8
i3 256x256 65536 uint8
level 1x1 8 double
¿Qué hace la funcion graythresh?
Escoge el umbral para minimizar la variación entre las clases de los pixeles negros y blancos.
¿Cómo se realiza la conversión en el comando im2bw?
Convierte la imagen en imagen binaria separando sus intensidades en dos valores [1 0] entre esta escala hace que 1 sea blanco y 0 sea negro.
La imagen binaria bw es de clase lógica, como puede ser vista, llamando el comando whos
7.- Determine el número de objetos de una imagen.
Luego de convertir la imagen a una imagen binaria, puede usar el comando bwlabel para determinar el numero de granos de arroz en la imagen , numObjets
¿Cómo funciona este comando?
[labeled,numObjects] = bwlabel(bw,4); Retorna en numObjects el número de objetos conectados dentro de BW que sería la imagen total
>> [labeled,numObjects]=bwlabel(bw,4);
¿Cuántos objetos presenta la imagen?
>> numObjects
numObjects =
101
8.- Examinar la matriz de nivel.Se puede usar imcrop para seleccionar una porcionde la imagen o sino usando la herramienta pixel región para examinar losvalores del pixelUsar imshow>> figure(7)>> imshow(labeled);
>> imtool(labeled);
9.-Mostrar la matriz de nivel como una matriz indexada de Pseudocolor.
Analiza el funcionamiento y los parámetros de el comando label2rgb.
Convierte la matriz labeled en un formato de imagen RGB para propósitos de visualización de regiones etiquetadas, los parámetros del comando son:
label2rgb(L, map, zerocolor, order)
Donde map puede ser una matriz colormap nx3 o una cadena que contiene los nombres de los colormap soportados por Matlab. Y zerocolor especifica el valor de color para etiqueta de valor 0, y order indica el orden en que se asignara los valores colormap de la matriz RGB.
>> pseudo_color = label2rgb(labeled, @spring, 'c', 'shuffle');
>> figure(8)
>> imshow(pseudo_color);
10.- Medida de las propiedades de los objetos.El comando regionprops mide propiedades de objetos y regiones en una imagen
>> graindata=regionprops(labeled,'basic')
graindata =
101x1 struct array with fields:
Area
Centroid
BoundingBox
¿Qué propiedades muestra la función regionprops?
STATS = REGIONPROPS(L,PROPERTIES) los elementos del entero Positivos de L corresponde a las regiones diferentes. Por
ejemplo, el juego de elementos de L igual a 1 corresponde a la región 1; el juego de elementos de L igual a 2 corresponde a la región 2; y así sucesivamente. STATS es una serie de la estructura de longitud max(L (:)). Los campos de la serie de la estructura denotan las propiedades diferentes para cada región, como esta especificado por las PROPIEDADES.
Las PROPIEDADES pueden ser una lista coma-separada de cordones, una serie
celular, los cordones conteniendo, el cordón ' el all', o el cordón ' el basic'. El juego de las cuerdas de la medida válida incluye:
'Area' 'EulerNumber' 'Orientation' 'BoundingBox' 'Extent' 'Perimeter' 'Centroid' 'Extrema' 'PixelIdxList' 'ConvexArea' 'FilledArea' 'PixelList' 'ConvexHull' 'FilledImage' 'Solidity' 'ConvexImage' 'Image' 'SubarrayIdx' 'Eccentricity' 'MajorAxisLength' 'EquivDiameter' 'MinorAxisLength'
¿Qué medida usa la propiedad basic? Detalle cada una.
Si se coloca Basic las propiedades que se computan son:
Area: es un escalar que muestra el número actual de pixeles de la figura. Centroid: indica un vector que es el centro de masa de la figura. BoundingBox: indica el tamaño del rectángulo más pequeño que contiene esta
región.
>> graindata(51)
ans =
Area: 140
Centroid: [114.5000 15.4500]
BoundingBox: [107.5000 4.5000 13 20]
Graficar centros de gravedad en la imagen:
>> centroids = cat(1,graindata.Centroid);
>>hold on
>>plot(centroides(:,1),centroides(:,2),'b+')
En este caso el comando marcara cada grano de arroz, esto por el parámetro ‘b+’:
CONCLUSIONES
Se consiguió una aplicación de contador de objetos útil en una aplicación agroindustrial de selección de arroz o conteo de objetos
Se logro crearle un fondo más uniforme a una imagen Se determino el objeto de mayor área en una imagen El comando regionprops mide propiedades de objetos y regiones en una
imagen