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.

No hay comentarios:

Publicar un comentario