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