jueves, 16 de diciembre de 2010

Toma de landmarks con R.

Aunque no lo crean, es posible tomar landmarks escalados directamente en R sobre imágenes .jpg. bye bye TPS!!! (mi experiencia con esta gama de paquetes no ha sido nada buena). Afortunadamente descubrí que en R podría hacerlo, aunque al principio haya sido bastante difícil.
Debo empezar diciendo que para poder tomar los landmarks en R. se requiere tener el paquete "rimage" que corre a partir de la versión 2.9... de R (esto no es problema ya que exactamente hoy acaba de salir la ultima versión de R 2.12.1). http://www.r-project.org/

Debo también advertir que en ocasiones dependiendo del compu con el que trabajemos es necesario comprimir un poco las fotos o imágenes que se utilicen debido al peso de estas, yo utilizo un programa gratis llamado "JPEG Resizer" que comprime bastante bien varias imágenes al tiempo y de manera muy sencilla. http://ocio.teoriza.com/truco-para-comprimir-fotos-a-un-reducido-tamano-y-enviarlas-por-email-con-jpg-resizer-y-camara-digital.
(tener en cuenta no disminuir tanto la calidad de las fotos para que se puedan notar regiones puntuales donde serán colocados los landmarks!!!)..

Entonces para empezar se debe descargar el paquete "rimage" utilizamos el comando:

> install.packages ("rimage")
# inmediatamente nos pedirá que escojamos un " CRAN mirror" que es un sitio/dirección del cual se descargara el paquete (ver http://cran.r-project.org/mirrors.html). se puede escoger el "mirrror" de su preferencia, yo generalmente escojo "USA (CA2)".

>library (rimage)
# esto se utiliza para cargar el paquete que acabamos de descargar.

> guarapo<-read.jpeg("guarapo.jpg")
# cargo mi imagen, a la cual pondré los landmarks y le doy un nombre que en este caso es "guarapo". El archivo que estoy leyendo es un archivo .jpeg llamado del mismo modo ("guarapo.jpg")

>plot (guarapo)
# visualizo mi imagen en la ventana activa de R.


>b<-locator(2,type="o",pch=8,lwd=2,col="red",lty="11")
# Como sabemos, para que un conjunto de landmarks tomado de distintos individuos sea comparable estos deben estar escalados bajo un mismo objeto. Para ello, las fotografías que se utilicen deben haberse tomado previamente con un objeto de longitud conocida (p.ej. una regleta invariante). Dentro de los argumentos del comando debe ir especificado el tipo de símbolo que queremos que sirva de indicador y el color  (pch=8) (col="red"), los símbolos y colores disponibles  pueden consultarse en :http://www.statmethods.net/advgraphs/parameters.html. También podemos decidir que tan continua queremos que sea la linea que uno los dos puntos (lty="11") (entre mas alto el numero mas discontinua sera). El numero 2 indica el numero de puntos que se utilizaran para la escala.



>scale1<- sqrt(sum(diff(b$x)^2+diff(b$y)^2))
# A partir de los dos puntos tomados se toma la escala a la cual posteriormente se pondrán los landmarks.

>landmarks1<-unlist(locator(12,type="p",pch=21,bg="green"))/scale1
# Se toman 12 landmarks y son escalados con la medida que previamente se tomo!!

>pepitoria<-matrix(landmarks1, 12, 2)
# Se ponen los landmarks en una matriz para organizarlos.


           [,1]       [,2]
 [1,] 2.8027921 3.69618079
 [2,] 3.7922110 2.74886485
 [3,] 4.8237328 2.56992739
 [4,] 5.7289458 2.15942382
 [5,] 5.6131627 1.72786878
 [6,] 3.3080273 1.32789094
 [7,] 0.7923772 0.38057500
 [8,] 0.3713478 0.10690595
 [9,] 0.0345244 0.01217435
[10,] 1.2870866 2.28573261
[11,] 1.6554872 2.74886485
[12,] 2.1607224 3.03305963

fix (pepitoria)

# se pueden asignar nombres a las variables que es este caso serian "x" y "y".


             x          y
 [1,] 2.8027921 3.69618079
 [2,] 3.7922110 2.74886485
 [3,] 4.8237328 2.56992739
 [4,] 5.7289458 2.15942382
 [5,] 5.6131627 1.72786878
 [6,] 3.3080273 1.32789094
 [7,] 0.7923772 0.38057500
 [8,] 0.3713478 0.10690595
 [9,] 0.0345244 0.01217435
[10,] 1.2870866 2.28573261
[11,] 1.6554872 2.74886485
[12,] 2.1607224 3.03305963

>write.table(pepitoria, file = "pepitoria.txt")
# Por ultimo se escribe una tabla en formato .txt de nuestra matriz para almacenar los datos. Este archivo creado aparecerá en el directorio en el que estemos trabajando (p.ej. Mis Documentos, etc).


Espero les sea util.!!!