![Observando la receta de su globo ocular: un proyecto BME60B: 9 pasos Observando la receta de su globo ocular: un proyecto BME60B: 9 pasos](https://i.howwhatproduce.com/images/001/image-791-57-j.webp)
Tabla de contenido:
- Paso 1: toma fotos
- Paso 2: cargue las imágenes en MATLAB
- Paso 3: análisis de imágenes
- Paso 4: Calcule el ancho de los cuadrados blancos en el tablero de ajedrez
- Paso 5: repita los pasos 3 y 4 para la imagen de prueba
- Paso 6: Calcule la ampliación de la lente
- Paso 7: encontrar R-cuadrado y la prescripción del usuario mediante interpolación
- Paso 8: Mostrar la prescripción del usuario en un gráfico
- Paso 9: Reduzca su prescripción
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
![Observando la receta de su globo ocular: un proyecto BME60B Observando la receta de su globo ocular: un proyecto BME60B](https://i.howwhatproduce.com/images/001/image-791-58-j.webp)
Por: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
El aumento es una de las características clave presentes en las gafas de lectura, que se clasifican por su graduación de dioptrías. Según la Universidad de Tecnología de Michigan, una dioptría es una distancia focal de la lente, generalmente medida en mm, en la unidad de metros (Universidad de Tecnología de Michigan). Debido a que los anteojos para leer tienen lentes convexos, la distancia focal sería positiva, lo que haría que las dioptrías también fueran positivas (HyperPhysics). La distancia focal aumenta a medida que la distancia entre el objeto se aleja de la lente real, y esto hace que las dioptrías disminuyan ya que son inversamente proporcionales. Por lo tanto, tener anteojos de lectura con dioptrías adicionales ayudaría a la lente a ampliar la vista de modo que pueda parecer que la distancia focal es menor al aumentar el valor de las dioptrías.
El código presentado se utilizará para predecir la dioptría de una lente con una prescripción desconocida. Se utilizan dos entradas para calcular la prescripción: una fotografía del fondo controlado sin usar lentes, y otra fotografía del mismo fondo pero a través del lente elegido. El programa medirá la distorsión entre estas dos fotografías. A partir de ahí, podremos estimar las dioptrías de la lente y producir un resultado para que el usuario lo vea.
Para este Instructable, necesitará:
- Un patrón de tablero de ajedrez en blanco y negro impreso en una hoja de papel de 11 x 8,5 pulgadas
- Una cámara con la capacidad de bloquear su enfoque.
- Un trípode o algo similar para asegurar la cámara.
- Varias recetas de gafas para leer.
- MATLAB
Paso 1: toma fotos
![Tomar fotos Tomar fotos](https://i.howwhatproduce.com/images/001/image-791-59-j.webp)
![Tomar fotos Tomar fotos](https://i.howwhatproduce.com/images/001/image-791-60-j.webp)
![Tomar fotos Tomar fotos](https://i.howwhatproduce.com/images/001/image-791-61-j.webp)
Para calcular la ampliación de una lente, debe poder compararla con el tamaño real del objeto. Para este proyecto, compararemos una imagen ampliada con una imagen de control.
Por lo tanto, el primer paso es tomar dos fotos de la misma imagen: la primera solo a través de la cámara y la segunda a través del lente de las gafas de lectura que desea probar.
Tomarás una fotografía de un tablero de ajedrez en blanco y negro de 8.5x11 pulgadas con una cuadrícula de 1 pulgada. Configure su cámara a 11 pulgadas de distancia del tablero de ajedrez. Antes de tomar las fotos, bloquee el enfoque en el tablero de ajedrez.
Tome una foto del tablero de ajedrez sin las gafas para leer. Luego, sin mover nada, coloque las gafas de lectura frente a la cámara y tome la segunda foto.
Asegúrese de que la posición de su cámara no se mueva entre tomas. Lo único que debería cambiar entre las dos fotos es la presencia de la lente de las gafas frente a la cámara.
Cuando haya terminado con las fotos, cárguelas en su computadora.
Paso 2: cargue las imágenes en MATLAB
![Cargue las imágenes en MATLAB Cargue las imágenes en MATLAB](https://i.howwhatproduce.com/images/001/image-791-62-j.webp)
Abra una nueva secuencia de comandos.
Primero, especifique el directorio donde se almacenan las fotos. Luego, use la función dir para extraer imágenes-j.webp
Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Para nuestro proyecto, queríamos preguntarle al usuario del programa qué archivos querían comparar. La primera sección le pide al usuario que especifique la imagen de control y la segunda le pide al usuario que especifique la imagen de prueba.
- % Pregunte al usuario qué archivo es la imagen de control.
- Control = input ('# de imagen de control. / N');
- ControlFile = [GetDir (Control).name]
- % Pregunte al usuario qué archivo es la imagen que desea analizar.
- ChooseFile = input ('\ n # de imagen que desea analizar. / N');
- PrescripFile = [GetDir (ChooseFile).name];
Paso 3: análisis de imágenes
![Análisis de imagen Análisis de imagen](https://i.howwhatproduce.com/images/001/image-791-63-j.webp)
![Análisis de imagen Análisis de imagen](https://i.howwhatproduce.com/images/001/image-791-64-j.webp)
Una imagen coloreada en MATLAB es de tamaño MxNx3, mientras que una imagen en escala de grises es MxN. Esto significa que es más rápido mejorar / editar una imagen en escala de grises porque hay menos datos de los que realizar un seguimiento. Utilice rgb2gray para convertir la imagen a escala de grises. (Se usó la función de imrotación porque nuestras fotos venían en horizontal; esta línea de código puede ser necesaria o no en su versión).
- % convertir a escala de grises y rotar
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = rotar (I, 90);
A continuación, muestre la imagen. La función de subtrama se utiliza para que la imagen de prueba pueda estar junto al control en pasos posteriores.
- %monitor
- Figura 1);
- subtrama (1, 2, 1)
- imshow (yo);
- título (ControlFile);
Utilice imcrop para pedirle al usuario que recorte el tablero de ajedrez de la imagen completa. El siguiente código también muestra un cuadro de mensaje para proporcionar instrucciones al usuario.
- % recortar tablero de ajedrez para su análisis
- waitfor (msgbox ({'Use la cruz para recortar el tablero de ajedrez.', 'Luego haga doble clic en el área de interés.'}));
- I_crop = imcrop (I);
Utilice imbinarize para binarizar la imagen.
I_binary = imbinarize (I_crop);
Paso 4: Calcule el ancho de los cuadrados blancos en el tablero de ajedrez
![Calcula el ancho de los cuadrados blancos en el tablero de ajedrez Calcula el ancho de los cuadrados blancos en el tablero de ajedrez](https://i.howwhatproduce.com/images/001/image-791-65-j.webp)
![Calcula el ancho de los cuadrados blancos en el tablero de ajedrez Calcula el ancho de los cuadrados blancos en el tablero de ajedrez](https://i.howwhatproduce.com/images/001/image-791-66-j.webp)
![Calcula el ancho de los cuadrados blancos en el tablero de ajedrez Calcula el ancho de los cuadrados blancos en el tablero de ajedrez](https://i.howwhatproduce.com/images/001/image-791-67-j.webp)
A continuación, solicite al usuario que dibuje una línea a través de la imagen usando imline. Esta línea debe correr horizontalmente a través del tablero de ajedrez. Debe comenzar y terminar en un cuadrado negro (no importa dónde); esto se debe a que mediremos el ancho de los cuadrados blancos, no los negros.
- %Dibujar linea
- Figura 1)
- subtrama (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Haga clic y arrastre para dibujar una línea que abarque 9 cuadros, desde un espacio negro a un espacio negro.', 'Haga doble clic para confirmar.'}));
- línea = imline;
- posición = esperar (línea);
- puntos finales = line.getPosition;
Extraiga las coordenadas X e Y de los puntos finales de la línea dibujada.
- X = puntos finales (:, 1)
- Y = puntos finales (:, 2);
Utilice improfile para producir un gráfico basado en las intensidades encontradas a lo largo de la línea dibujada. Esto debería parecerse a una onda cuadrada que va de 0 (negro) a 1 (blanco). Calcula también los picos y sus ubicaciones.
- Figura 2)
- subtrama (1, 2, 1)
- title ('Intensidad de la imagen en la línea de improfile (Control)')
- improfile (I_binary, X, Y); cuadrícula activa;
- [~, ~, c1, ~, ~] = improfile (I_binary, X, Y);
- [picos, loc] = encontrar picos (c1 (:,:, 1));
- esperar
- plot (loc, picos, 'ro');
- esperar
Encuentre la longitud de cada meseta en el gráfico de improfile usando un bucle for. Ejecute el ciclo for para la misma cantidad de picos que hay en el gráfico de improfile. Para calcular la longitud de cada meseta, utilice la función "buscar" para encontrar todas las ubicaciones donde hay un valor de intensidad "1" en lugar de "0". Luego, calcule la longitud de esa matriz para obtener la longitud total de la meseta, que debería ser igual al ancho de un cuadrado blanco en píxeles. ControlPlateauList = zeros (1, length (loc));
para i = 1: longitud (loc)
si i == longitud (loc)
meseta = encontrar (c1 (loc (i): fin,:, 1));
demás
meseta = encontrar (c1 (loc (i): loc (i + 1) -1,:, 1));
fin
ControlPlateauList (i) = longitud (meseta);
fin
Paso 5: repita los pasos 3 y 4 para la imagen de prueba
![Repita los pasos 3 y 4 para la imagen de prueba Repita los pasos 3 y 4 para la imagen de prueba](https://i.howwhatproduce.com/images/001/image-791-68-j.webp)
* Nota: al dibujar la línea de improfile en la imagen de prueba, asegúrese de dibujarla a través de los cuadrados que corresponden a la línea que dibujó en la imagen de control.
Paso 6: Calcule la ampliación de la lente
![Calcule la ampliación de la lente Calcule la ampliación de la lente](https://i.howwhatproduce.com/images/001/image-791-69-j.webp)
Las medidas ampliadas se calculan dividiendo la media de la longitud de la meseta, que se calculó en el paso 5, por la media de la longitud de la meseta de control, que se calculó en el paso 4. Se calcula que es 1,0884.
aumento = media (plateauList) / media (ControlPlateauList);
Paso 7: encontrar R-cuadrado y la prescripción del usuario mediante interpolación
![Encontrar R-cuadrado y la prescripción del usuario mediante interpolación Encontrar R-cuadrado y la prescripción del usuario mediante interpolación](https://i.howwhatproduce.com/images/001/image-791-70-j.webp)
Usando el código:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Podemos encontrar el valor R-cuadrado del gráfico GivenPresciption (valores dados de nuestras lentes) frente a MagArray (una matriz de las proporciones de medidas de aumento que calculamos anteriormente). Al tener un valor de R cuadrado lo suficientemente alto, se puede inferir que existe una correlación lo suficientemente fuerte como para justificar el uso de este método. Para este caso particular, el valor de R cuadrado fue 0,9912, lo que sugiere una fuerte correlación y, por lo tanto, se justifica el uso de este método en el análisis.
Usando la función:
Prescription = interp1 (MagArray, GivenPrescription, magnificación, 'lineal');
Podemos interpolar el valor de prescripción correspondiente (en el eje x) de nuestra relación de aumento (un valor en el eje y) y encontrar cuál es la prescripción del usuario.
La interpolación de datos es importante para que este método funcione, ya que nos permite hacer suposiciones sobre la información que no tenemos, en función de la información que tenemos. Si bien una línea de mejor ajuste técnicamente sería un candidato más fuerte para esta suposición, la creación de límites para reducir la cantidad de salidas tiene el mismo efecto que los anteojos recetados con valores uniformes incrementales de todos modos. Esto se explica en pasos posteriores.
Paso 8: Mostrar la prescripción del usuario en un gráfico
![Mostrar la prescripción del usuario en un gráfico Mostrar la prescripción del usuario en un gráfico](https://i.howwhatproduce.com/images/001/image-791-71-j.webp)
Usando el siguiente código:
- figura;
- trama (GivenPrescription, MagArray, '-g')
- esperar
- trama (prescripción, aumento, 'pb')
- esperar
- red
- leyenda ('Datos', 'Puntos interpolados', 'Ubicación', 'NW')
Podemos trazar un gráfico que muestre las relaciones de aumento frente a la prescripción dada con una línea verde y los datos encontrados de nuestro aumento calculado frente a nuestra prescripción interpolada con una estrella azul. Luego, la leyenda etiqueta el título, el eje xy el eje y, y coloca la leyenda en la esquina superior izquierda.
Paso 9: Reduzca su prescripción
![Reduzca su prescripción Reduzca su prescripción](https://i.howwhatproduce.com/images/001/image-791-72-j.webp)
El siguiente código se utiliza para generar el redondeo de la prescripción:
-
si Receta <= 1.125
CalculatedPrescription = '1.0';
-
elseif Receta <= 1.375
CalculatedPrescription = '1,25';
-
elseif Receta <= 1.625
CalculatedPrescription = '1.5';
-
elseif Receta <= 1.875
CalculatedPrescription = '1,75';
-
elseif Receta <= 2.25
CalculatedPrescription = '2.0';
-
elseif Receta <= 2.625
CalculatedPrescription = '2.5';
-
elseif Receta <= 3
CalculatedPrescription = '2.75';
-
elseif Receta <= 3.375
CalculatedPrescription = '3.25';
-
demás
CalculatedPrescription = 'desconocido';
- fin
La prescripción encontrada a través de la interpolación no refleja necesariamente la prescripción real; esto se debe a que siempre habrá ligeras variaciones en el análisis de la foto debido a un error humano. Por lo tanto, necesitamos este paso para clasificar la prescripción real.
Las prescripciones que se dan suelen empezar a partir de 1,0 dioptrías y aumentan en 0,25 en sus prescripciones, por lo que tras calcular la prescripción queremos determinar la prescripción que mejor se adapta a lo que pueda necesitar el usuario. Después de calcular la prescripción, la ejecutamos a través de las declaraciones If proporcionadas para verificar su valor y determinar qué prescripción es necesaria. Cualquier cantidad menor o igual a 1.125, entonces la prescripción es 1.0. Cualquier cantidad menor o igual a 1.375, la prescripción es 1.25. Cualquier cantidad menor o igual a 1.625, la prescripción es 1.5. Cualquier cantidad menor o igual a 1.845, la prescripción es 1.75. Etcétera.
Tenemos los valores aumentando ya que estamos comprobando si los valores son menores que. Si hiciéramos que los valores fueran decrecientes, entonces la primera instrucción if leería la primera instrucción if todo el tiempo. Si la prescripción es la más pequeña, queremos que la reconozca como la más pequeña de inmediato, por eso el valor más pequeño es el que comenzamos. Cualquier valor superior al valor más alto significa que la prescripción no está dentro del rango de nuestros datos, por lo que dará la lectura de cadena "Desconocida".
Recomendado:
Receta de la caja complementaria (remezcla de hardware / flexión de circuitos): 11 pasos (con imágenes)
![Receta de la caja complementaria (remezcla de hardware / flexión de circuitos): 11 pasos (con imágenes) Receta de la caja complementaria (remezcla de hardware / flexión de circuitos): 11 pasos (con imágenes)](https://i.howwhatproduce.com/images/002/image-3626-16-j.webp)
Receta de Companion Box (Hardware Remix / Circuit Bending): La remezcla de hardware es una forma de reexaminar las posibilidades de las tecnologías musicales. Las Companion Box son instrumentos musicales electrónicos de bricolaje doblados en circuitos. Los sonidos que hacen dependen del circuito que se utilice. Los dispositivos que hice se basan en multi-eff
Haga su propio globo LED POV: 5 pasos (con imágenes)
![Haga su propio globo LED POV: 5 pasos (con imágenes) Haga su propio globo LED POV: 5 pasos (con imágenes)](https://i.howwhatproduce.com/images/002/image-5496-24-j.webp)
Haz tu propio globo LED POV: en este proyecto te mostraré cómo combiné un par de piezas de acero con un Arduino, una tira de LED APA102 y un sensor de efecto Hall para crear un globo LED RGB POV (persistencia de la visión). Con él puedes crear todo tipo de imágenes esféricas
My Tiny Whoop: una receta de Whoop + algunos consejos y trucos: 8 pasos
![My Tiny Whoop: una receta de Whoop + algunos consejos y trucos: 8 pasos My Tiny Whoop: una receta de Whoop + algunos consejos y trucos: 8 pasos](https://i.howwhatproduce.com/images/001/image-2263-59-j.webp)
My Tiny Whoop: una receta de Whoop + algunos consejos y trucos: ADVERTENCIA: ahora está ingresando a mi primer Instructable, y puede encontrar mucha estupidez y falta de planificación y / o habilidad. Esta es mi configuración personal de Tiny Whoop que uso todos los días, así que pensé en compartirla. Es fácil de viajar (no
¡Quemador alimentado por USB! Este proyecto se puede quemar a través de plásticos / madera / papel (el proyecto divertido también tiene que ser de madera muy fina): 3 pasos
![¡Quemador alimentado por USB! Este proyecto se puede quemar a través de plásticos / madera / papel (el proyecto divertido también tiene que ser de madera muy fina): 3 pasos ¡Quemador alimentado por USB! Este proyecto se puede quemar a través de plásticos / madera / papel (el proyecto divertido también tiene que ser de madera muy fina): 3 pasos](https://i.howwhatproduce.com/images/004/image-9860-18-j.webp)
¡Quemador alimentado por USB! Este proyecto se puede quemar a través de plásticos / madera / papel (el proyecto divertido también tiene que ser de madera muy fina): ¡NO HAGA ESTO USANDO USB! Descubrí que puede dañar tu computadora por todos los comentarios. mi computadora está bien aunque. Utilice un cargador de teléfono de 600ma 5v. Usé esto y funciona bien y nada se puede dañar si usa un enchufe de seguridad para detener la energía
Modificación de la bombilla LED para el ajuste del globo ocular Halo 998: 8 pasos
![Modificación de la bombilla LED para el ajuste del globo ocular Halo 998: 8 pasos Modificación de la bombilla LED para el ajuste del globo ocular Halo 998: 8 pasos](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10968677-led-bulb-retrofit-for-halo-998-eyeball-trim-8-steps-j.webp)
Modificación de la bombilla LED para la moldura del globo ocular Halo 998: este instructivo describe cómo modificar las piezas de la moldura del globo ocular Halo 998 para aceptar la bombilla regulable LumiSelect PAR / R16 de earthled.com. La bombilla LED es demasiado grande para pasar por la abertura del globo ocular de la moldura pieza, pero con un poco de ef