¿Cómo seleccionar los pixeles de un objeto con MATLAB?

Hace unos dias recibi un correo de un lector que queria obtener los valores de los pixeles en RGB de la figura que se muestra a la derecha. El planteamiento del problema, si no me equivoco, es el siguiente. Se obtiene este tipo de imagen a traves de un objeto que ejerce una presion sobre una pelicula especial. Las distintas tonalidades de colores que se obtienen expresan diferentes cantidades de presion. La empresa que produce este tipo de peliculas, tiene su tabla de conversion. En fin, para obtener una buena medicion de esta imagen se requiere de un algoritmo que sea capaz de identificar el objeto y de tomar las coordenadas de cada uno de los pixeles que conforman a este objeto, para que el usuario pueda accesar cada uno de ellos y leer los valores o modificar lo que sea necesario, segun el problema que se tenga en las manos.

Pendiente....
En estos dias pongo el archivo M. Por lo pronto aqui cuentan con el contenido del mismo.

Solucion en Matlab


function [row,col]=Density()
ID_RGB=imread('C:\Users\moises\Desktop\6kN.bmp');
ID=ID_RGB;
ID_hsv=rgb2hsv(ID);
height=size(ID,1);
width=size(ID,2);
for r=1:height
for c=1:width

if(ID_hsv(r,c,2)>.05)&&((ID_hsv(r,c,1)>.6)||((ID_hsv(r,c,1)<.1)))
ID(r,c,1)=0;
ID(r,c,2)=0;
ID(r,c,3)=0;
else
ID(r,c,1)=255;
ID(r,c,2)=255;
ID(r,c,3)=255;
end

end
end

image=im2bw(ID,0.5);
[imlabels, numObjects]=bwlabel(image, 8);
graindata=regionprops(imlabels,'basic');
objects=size(graindata,1);

for i=1:objects
if(graindata(i).Area>50000)
label = i;
i=objects;
end
end
[row, col] = find(bwlabel(imlabels)==label);


Saludos,

Moi.

Dudas, quejas, moises.pacheco@gmail.com

5 comments:

Virginia said...

Hola Moisés

Muy interesante esta aplicación. Sólo tengo una pequeña duda, y se trata de la condición del if, los valores decimales que aparacen, pero supongo que son esos los valores de conversión de la película a los que te refieres, no?

Un saludo

Vehículos said...

Hola Moises

De acuerdo a lo que entiendo de esos films, el valor promedio de RGB es lo que corresponde mediante ciertas conversiones a la presion aplicada.

Por lo que te faltaria obtener el average de RGB y luego compararlo con la presion que fue el input.

Ing. Moisés Pacheco Gendrop said...

Hola Virginia, no ese número del if especifica la intensidad del color magenta de la imagen. Es para que considere como posibles objetos todos los pixeles de diferentes intensidades de color magenta.

saludos,

moi

Ing. Moisés Pacheco Gendrop said...

Respecto a lo que mencionas sobre el valor promedio de los pixeles en RGB si tienes razon. Yo lo deje abierto, para que el usuario utilice la informacion para realizar los calculos que requiera. Como no cuento con las tablas de conversion para ese film en especifico, por eso fue que lo deje abierto. Al final te entrega las coordenadas de cada uno de los pixeles que conforman el objeto de interes, para que puedas leer los valores de cada uno de ellos y realizar los calculor que se requieran.

saludos,

moi

Clandestina said...

Hola, estoy trabajando con la cmucam3, ya tengo todo el software necesario para trabajar. Me gustaría saber si conoces una forma de mandar un byte al robonova, este byte sería leído e interpretado del robonova desde el "puerto" ERX, el problema es que no se a donde mandarlo desde la cmucam3. Te agradeceria demasiado una sugerencia.