Mostrando entradas con la etiqueta degree. Mostrar todas las entradas
Mostrando entradas con la etiqueta degree. Mostrar todas las entradas

sábado, 8 de junio de 2013

Gigapan Montserrat (49.86 GPx)

Este proyecto ha sido uno de los que me ha hecho perder más tiempo buscando el sitio perfecto para fotografiarlo. Desde que me planteé fotografiar estas montañas rocosas tan singulares de Cataluña y que tan cerca tengo de casa, han sido muchas las visitas a varios puntos hasta decidirme por este último situado cerca de St. Cristófol  (recomiendo que para la ubicación exacta os fijéis en detalle en el mapa de geolocalización que hay en la propia web de Gigapan, junto a la foto). 

Todo empezó en verano del 2012 cuando empecé a buscar sitios, pero siempre había cosas negativas: imposibilidad de acceso en vehículo, necesidad de arrastrar todo el robot cuestas arriba (subiendo sin él ya era un buen sacrificio), arboles que me tapaban, etc...

Sabia que no podia hacerla en pleno verano por las altas temperaturas, prefería hacerlo entre primavera y principio de verano, entre otras cosas por dos factores:

* El color del paisaje , sin duda es siempre mejor la primavera que le da un toque más verde, mientras que en verano es más árido y seco, colores pastel que a mi no me llenan!
* La posición del sol : (aquí si que era más complicado) pues las montañas más bien están  situadas entre sureste y oeste, y como todos sabemos, el sol sale por el este, y a medida que pasan las horas va hacia el sur (mira que bién: con el sol de cara!) . Necesitaba hacer las capturas a primera hora de la mañana para evitar encontrarme que el sol me quemara las capturas. Otro factor importante es la inclinación del sol, cuanto más nos aproximamos a verano el sol está más vertical y eso me era positivo para reducir las sombras proyectadas por las propias montañas. Tenia que buscar un compromiso! Menos mal que mediante la aplicación SunSurveyor para Android y el ThePhotographerEphemerids para muchos sistemas operativos me han ayudado a todos estos planteamientos. 


Pasó el verano y otoño del 2012, re-diseñé el robot y ahora era mucho más ligero, pero aun no tenia el lugar perfecto. Fueron varias las excursiones visitando lugares en final de invierno y principios de primavera. Muchas ojeadas al mapa cartográfico y al Google earth , hasta que un dia me subí a una montaña y ya le daba mi visto bueno con algo de resignación. Seria una ascensión fuerte y me planteaba subir todo el material haciendo dos viajes hasta el posible aparcamiento.

Luego, una vez en casa , mirando distancias con el Google earth , y mediante la capa de fotografias de Panoramio descubrí que una persona había realizado una panorámica justo a pocos centenares de metros de dónde había aparcado, pues al dia siguiente, de nuevo , otra excursión para buscar este sitio: era perfecto !



Ya tenia el lugar, luego el dia: domingo 26 de mayo. Lo teníamos todo a punto. Emma había preparado unas magdalenas para matar el hambre mientras haríamos las fotos. Salimos pasadas las 8 de la mañana de Manresa, habia mala visión pero todo y eso recorrimos los 20 kms hasta llegar al lugar y cada vez estaba la montaña más tapada . Esperemos un rato, miremos la previsión meteorológica y pintaba que deberíamos esperarnos almenos unas horas para ganar nitidez, y muy resignadamente cancelemos la panorámica.


Probaríamos una semana más tarde... y entre semana, me puse a modificar el programa del robot. Desde el primer diseño que tenia un error con el solape de imágenes y mi cabeza me decía que debía buscar el error, no podía ser que "mágicamente" coincidiera el solape de imágenes.

Tenia un error de concepto: Cuando nos hablan de los grados de visión de un objetivo, se refieren al angulo que se provoca en la diagonal de la imagen, lo que "engloba" el angulo vertical y al horizontal. 

Después de plantearme un excell y verificarlo con informaciones de varias webs, ya tenia la fórmula, sólo era faena de implementarla en el Arduino, y así fue: programé y probé sólo con la electrónica del robot (sin conectar motores, sólo Arduino y LCD alimentados por el USB). La cosa cuadraba, y yo contento tras creer haber encontrado con la solución !


Al próximo sábado, repetimos la excursión (esta vez sin magdalenas!) y empecé a montarlo todo...
y el allen del 6 ? mierda ! me la había dejado en casa, tocaría realizar el ajuste basto de alineamiento a base de piedras en la base.

Enfoco a un punto de compromiso (Santuario de St. Benet) y bloqueo con cinta aislante los anillos de zoom y enfoque.  Programo los parámetros tanto en la cámara como en el robot. 


Focal equivalente 900 mm (zoom a 400mm * Teleconversor 1.4x * factor recorte de la Nikon D5200)
ISO 640, f9 y 1/1000" , balance de blancos nublado y todo en JPG (debería comprar otra SD para poder disparar en RAW, pero con las tarjetas que tengo actualmente me quedaría al límite de capacidad y no vale la pena jugársela y quedarte Out of memory). Programo un extremo, luego otro, la nueva función solape la ajusto al 25%... el LCD me informa del número resultante de capturas y tiempo: buff... tengo miedo de no tener capacidad de baterías suficiente en la cámara (tengo 3 EN-EL14). Decido re-programar las tareas del arduino , reduciendo el solape al 20% y "recortando" la imagen resultante. Ahora si me gusta...


Pulso Select y empieza...bién! Me empiezo a olvidar del invento y voy ordenando todo lo innecesario y aprovecho para tweetear el evento. Emma me dice " si que vas a pillar terreno, casi salgo yo "....ein? ostras ! el robot ha girado más de la cuenta ! Un poco más y se me para el corazón al ver que los cables estaban casi al límite, menos mal que veo que acaba la fila y retrocede....empiezo a analizarlo todo  y observo que el robot recorre un 50% de los límites prefijados más de lo que esperaba, todo y ello el solape es bueno.

Dejo que pase el tiempo y tras cercionarme que fila tras fila llega al mismo punto decido que vaya haciendo y yo ya me encargaré luego de recortar la imagen final.


Cuando llevamos 2726 disparos (29 filas x 94 columnas) damos por capturadas todas las imágenes necesarias, si fuera por programación habrían sido unas 3.478 capturas. Es momento de desmontarlo todo y tiempo para empezar con la segunda parte: el procesado.


Una vez en casa, empiezo visualizar varios JPG y los veo borrosos, como desenfocados. Empiezo a intentar buscar una lógica aplastante y no la veo. He realizado varias pruebas y la única opción que veo es que tuviera desajustado las dioptrías situado junto al visor de la cámara (si hubiera enfocado por pantalla...eso no habría pasado!).

Mediante CameraRAW re-nombro los archivos y aprovecho para jugar un poco para darle un poco de nitidez y vidilla, a ver si salvaba las imágenes de la borrosidad modificando claridad, intensidad y saturación. 

Luego , y tras más de tres horas de reconversión ya es tiempo para AutopanoGiga. La previsualización tardó poco más de una hora y la renderización a formato .kro (199.5 Gb) fueron unas 18 horas con el iMac core i5 a 3.6GHz (+16 GB RAM) .


Luego , subirla al servidor de Gigapan , otras 50 horas . En este paso, el servidor de Gigapan se colgó varias veces , menos mal que no se abortó el proceso en ningún momento.


Finalmente el resultado podeis ver el resultado final en :



Por cierto: Ya tengo resueltos los problemas de programación de Arduino, ahora sólo falta salir otra vez a la calle para disfrutar y pasar nuevas aventuras haciendo otra Gigapanorámica.








sábado, 26 de enero de 2013

Porque un grado importa (III)

Seguimos con las matemáticas aplicada a la fotografía. Muchas veces cuando nos hablan de focales de objetivos nos quedamos con la idea de que si el número es grande es un tele-objetivo, que representa que tiene mucho “zoom”, pero no sabemos cual es el ángulo de visión, y de lo contrario, si el número es pequeño se tratará de un angular o gran angular.

Pero ¿ a cuantos grados equivale esa focal ?
Para ello deberemos ayudarnos de la trigonometría. Primero de todo , necesitaremos conocer las dos siguientes variables:

Focal a utilizar (aquí no hay mucho que explicar, tan sólo hay que ver a cuanto tenemos ajustado la focal en nuestro objetivo en mm). Si utilizamos un duplicador o tele convertidor deberemos multiplicar para obtener la focal resultante. Por ejemplo si tenemos un objetivo ajustado a 300 mm y utilizamos un tele convertidor de 1.4x, la focal resultante seria de 300 x 1.4 = 420mm. Otra opción es disparar una foto y acto seguido visualizar mediante la pantalla de la cámara la información referente a la focal en mm.


Diagonal del tamaño del sensor en milímetros. Si no sabemos como encontrar las dimensiones del sensor, y siempre hablando de cámaras del tipo bridge o réflex, podemos utilizar la siguiente tabla:

 

Si sois de los que os gusta calcular todo:
Diagonal sensor, una vez buscado en los manuales de la cámara, en las características técnicas suele decirlo, no seáis brutos y midáis con un pié de rey esas cotas si queréis evitar el riesgo de dañar el CMOS !  Aquí es tan fácil como aplicar el teorema de Pitágoras . En nuestro caso :

Diagonal sensor = raíz cuadrada de( ( distancia1*distancia) + (distancia2*distancia2) )

Realizaremos un ejemplo con el sensor de la d-90 que según caracteristicas técnicas de Nikon, el sensor mide 23,6 x 15,8 mm. , entonces :


Diagonal sensor = raíz ( ( 23,6*23,6) + (15,8*15,8) )
Diagonal sensor = raíz ( ( 556,96 ) + ( 249,64 ) )
Diagonal sensor = raíz ( 806,6 )
Diagonal sensor = 28,84 mm


Aprovecho para mostraros el efecto recorte producido por el factor conversión:


Imaginemos que utilizamos una Nikon d-90, un 500 mm de objetivo y un con un tele-conversor de 1.4x (no confundir con el factor del sensor!) . En principio estos son los datos que utilizaré en mi próximo proyecto Giga panorámico

Ya tenemos las dos variables: focal equivalente y tamaño de la diagonal del sensor, ahora ya solo falta aplicar la fórmula final:

Diagonal sensor = 28,84 mm
Focal = 500 x 1,4 (tele-conversor ) = 700 mm
Focal equivalente = Focal x Factor recorte = 700 x 1,5 = 1050 mm
Angulo de visión horizontal =2 * arc tangente ( diagonal sensor / 2 * focal  equivalente)
Angulo = 2 * arc tangente (28,84/ 2*1050)
Angulo = 2 * arc tangente (28,84/2010)
Angulo = 2 * arc tangente (0,013733)
Angulo = 2 * 0,78679
Angulo de visión horizontal = 1,57º

NOTA = Si no tenéis una calculadora científica, y disponéis de la calculadora de Windows, podéis calcular el arc tangente haciendo click en INV previo a tan.


Finalmente y ya puestos, calcularemos el ángulo de visión en vertical
Angulo de visión vertical = ángulo de visión horizontal * distancia2 / diastancia1
Angulo Vertical = 1,57 * (15,8 / 23,6)
Angulo Vertical = 1,57 * (0,6695)
Angulo Vertical = 1,05 º
  
Finalmente y para los usuarios de Arduino, aprovecho un pequeño código para calcular los grados y poder utilizarlo en vuestros proyectos:

// Calculo ángulo de visión de un objetivo por XavierGP

#define _360div2xPI     57.29577951

float d1=23.6;         // distancia 1 sensor CMOS (ancho)   Valor de la Nikon d90 !
float d2=15.8;         // distancia 2 sensor CMOS (alto)    Valor de la Nikon d90 !
float diagonal_sensor=sqrt((d1*d1)+(d2*d2));
float grados_horizontales;
float grados_verticales;
float factor =35/d1;     // en su defecto : FF = 1, Nikon DX=1.5 , Canon DX=1.6 , Olympus= 2
float focal = 700;       // valor zoom a utilizar (en mi caso 500 x 1.4)

void setup() { 
  Serial.begin(9600); // 9600 bps
}

void loop(){
 grados_horizontales= 2* (atan(diagonal_sensor/(2*focal*factor))*_360div2xPI);
 grados_verticales = grados_horizontales * d2 / d1;
 
  Serial.print("Diagonal sensor: ");
  Serial.print(diagonal_sensor);
  Serial.println(" mm.");
  Serial.print("Con una focal de ");
  Serial.print(focal);
  Serial.print(" mm. y un factor ");
  Serial.print(factor);
  Serial.print("x , el resultante es de ");
  Serial.print(grados_horizontales);
  Serial.print(" grados en Horizontal, y de ");
  Serial.print(grados_verticales);
  Serial.println(" grados verticales.");
}

Con todo esto ya puedo seguir con mi proyecto, para que sea más moldeable y versátil en cuanto a programación y poder definir in situ la focal a utilizar, ahora sólo falta adaptar esto al programa general.