Enfocador de Imágenes Online — Kernel Laplaciano 3×3 vía Convolución per-píxel de Canvas ImageData
Enfoca cualquier imagen usando un kernel laplaciano de enfoque 3×3 `[0, -1, 0; -1, 5, -1; 0, -1, 0]` — el método 4-conectado de segunda derivada según Gonzalez & Wintz Digital Image Processing (Addison-Wesley primera edición 1977; Gonzalez & Woods 4ª edición Pearson 2018 — aniversario de 40 años; Wintz fue el coautor de 1977, Woods sustituyó a Wintz desde la segunda edición de 1992). La convolución corre per-píxel: para cada píxel interior `(x, y)` de la imagen, el valor de canal de salida es `5 × centro - arriba - abajo - izquierda - derecha` (diagonales pesadas 0), produciendo una respuesta de alto contraste en bordes donde el píxel central difiere de sus vecinos ortogonales; las regiones planas devuelven respuesta cero. El resultado se mezcla con el original vía el deslizador de intensidad 1-100%: `salida = original + (enfocado - original) × intensidad/100`, donde intensidad=100 aplica laplaciano puro e intensidad=1 deja la imagen casi sin cambios. El deslizador tiene debounce de 100 ms vía setTimeout para colapsar eventos rápidos de arrastre en un solo re-renderizado. Nota — NO es enfoque de máscara-de-enfoque (que resta una copia con Gaussian-blur del original — un enfoque de detección de bordes más sofisticado usado en los predeterminados de Photoshop / GIMP / Lightroom). El enfoque laplaciano es computacionalmente más barato (sin paso separado de blur) pero es más sensible a amplificación de ruido en bordes y esquinas. La salida preserva el formato origen: PNG → PNG (alfa RGBA preservado); JPG → JPG calidad 0,92 (recodificado vía canvas.toBlob con cuantización del Anexo K según ITU-T T.81). Los archivos nunca salen del dispositivo.
Cómo enfocar una imagen
- Arrastra tu imagen a la herramienta o haz clic para seleccionarla. Las fotos grandes funcionan porque la convolución per-píxel queda local.
- Mueve el deslizador de intensidad 1-100%. Empieza alrededor de 30-50% y sube hasta que los bordes se vean nítidos pero no duros — el deslizador tiene debounce de 100 ms así que la vista previa se actualiza ~100 ms después de soltar el deslizador.
- La convolución laplaciana per-píxel ejecuta `5 × centro - arriba - abajo - izquierda - derecha` para cada píxel interior; el deslizador mezcla el resultado con el original en la intensidad elegida.
- Compara la vista previa antes/después para comprobar que los detalles finos parecen naturales y el grano no se amplifica. Para orígenes con mucho ruido, mantén la intensidad por debajo de ~30% para evitar amplificar artefactos JPEG junto a los bordes reales.
- Pulsa Descargar para guardar la copia enfocada. El original queda intacto en el disco — los archivos nunca salen del dispositivo.
Casos de uso comunes
- Rescatar fotos de móvil ligeramente desenfocadas antes de publicarlas en redes sociales o imprimirlas para un fotolibro.
- Dar más nitidez a fotos de producto en fichas de e-commerce donde el renderizado de miniaturas suaviza el detalle.
- Recuperar definición de bordes en capturas de pantalla reescaladas o comprimidas para documentación, blogs, o diagramas de tutorial.
- Compensar la suavización que introduce la compresión JPEG al guardar con calidad media (el detalle de alta frecuencia perdido por la cuantización DCT es parcialmente reconstruible vía aumento de bordes laplaciano).
- Producir una imagen de referencia enfocada píxel-precisa para análisis posterior basado en bordes (detección de objetos, pre-proceso OCR, matching de características).
Preguntas frecuentes
¿Es enfoque laplaciano o máscara-de-enfoque?
Laplaciano. El algoritmo aplica un kernel laplaciano de convolución 3×3 `[0, -1, 0; -1, 5, -1; 0, -1, 0]` directamente a la imagen origen — sin paso separado de Gaussian blur. La máscara-de-enfoque (USM) primero desenfoca el origen con un filtro Gaussiano, después resta la copia desenfocada del original (USM = original + (original - desenfocado) × cantidad); USM es lo que usan el 'Smart Sharpen' de Photoshop, el 'Unsharp Mask' de GIMP, y el panel 'Sharpening' de Lightroom. El enfoque laplaciano es computacionalmente más barato (una sola pasada de convolución, sin paso de blur separado) pero más sensible a amplificación de ruido en bordes. La variante 4-conectada usada aquí (peso central +5) es el kernel de enfoque estándar publicado en Gonzalez & Wintz / Gonzalez & Woods Digital Image Processing (Addison-Wesley primera edición 1977, 4ª edición 2018).
¿El enfoque puede arreglar una foto totalmente borrosa?
No. El enfoque realza bordes que ya existen en los datos de píxeles origen. Si el sujeto estaba del todo desenfocado o se movió durante una exposición larga, el detalle de alta frecuencia está realmente ausente del archivo — no hay nada para que la convolución laplaciana amplifique. Para desenfoque leve (motion blur ligero, desenfoque suave), intensidad moderada (30-50%) suele dejar el resultado aceptablemente nítido. Para desenfoque severo, lo mejor que puedes hacer es aceptar la limitación y volver a disparar — o usar herramientas super-resolución basadas en IA (waifu2x, ESRGAN, NAFNet) que fabrican detalle plausible vía priors aprendidos.
¿Enfocar añade ruido a la imagen?
Sí, a valores de intensidad altos. El kernel laplaciano amplifica cualquier componente de alta frecuencia de la imagen — bordes reales Y grano de ruido Y artefactos de límite de bloque JPEG. Mantén la intensidad por debajo de ~30% para orígenes con mucho ruido (fotos nocturnas de ISO alto, capturas JPEG de baja calidad) e inspecciona regiones planas como cielo / piel / fondos sólidos — si aparecen motas, reduce la intensidad. Para enfoque más consciente del ruido, usa variantes de máscara-de-enfoque en Photoshop / GIMP / Lightroom que incluyen un control de umbral separado.
¿En qué formato debería guardar el resultado?
PNG para archivado sin pérdidas o edición posterior (la imagen enfocada queda bit-exacta por toda la cadena). JPG a calidad 85-92 para uso web — la recodificación JPEG vía canvas.toBlob aplica la cuantización perceptual del Anexo K de ITU-T T.81, que introduce una pequeña pérdida adicional (~1-2% perceptualmente invisible) pero produce archivos 5-10× más pequeños que PNG para contenido fotográfico. La preservación de formato automática de la herramienta casa con el origen: orígenes PNG se quedan PNG; orígenes JPG producen JPG a calidad 0,92.
¿Se sube mi imagen?
No. La cadena decodificar + ctx.getImageData + bucle anidado de convolución laplaciana + mezcla por intensidad + ctx.putImageData + canvas.toBlob corre toda del lado cliente vía WHATWG Canvas. La pestaña Network de DevTools muestra cero peticiones de subida durante la conversión.
Kernel laplaciano de enfoque 3×3 + convolución per-píxel de Canvas + mezcla por intensidad
El algoritmo de enfoque aplica un kernel laplaciano de convolución 3×3 `[0, -1, 0; -1, 5, -1; 0, -1, 0]` a cada píxel interior de la imagen, después mezcla el resultado con el original vía el deslizador de intensidad 1-100%. El operador laplaciano es un método de segunda derivada estandarizado primero en la literatura de procesamiento de imagen vía Gonzalez & Wintz / Gonzalez & Woods Digital Image Processing (Addison-Wesley primera edición 1977, el libro de texto fundacional para enseñanza de procesamiento de imagen digital durante 40+ años, 4ª edición 2018 celebra el aniversario de 40 años). El laplaciano 4-conectado en sí es `[0, -1, 0; -1, 4, -1; 0, -1, 0]` (suma cero — detector de bordes puro); la variante de enfoque usada aquí tiene peso central +5 (en lugar de +4), que es equivalente a `original + Laplaciano = imagen + (respuesta-de-bordes 4-conectada)`. Matemáticamente: en cada píxel interior `(x, y)`, la salida para cada canal `c` es `5 × origen[x,y,c] - origen[x-1,y,c] - origen[x+1,y,c] - origen[x,y-1,c] - origen[x,y+1,c]`. Las regiones de bordes (donde el píxel central difiere de sus 4 vecinos ortogonales) producen una respuesta de alto contraste que amplifica la diferencia; las regiones planas (donde los 5 píxeles son similares) producen respuesta cercana a cero así que el original sobrevive casi sin cambios. El deslizador de intensidad mezcla: `salida = original + (enfocado - original) × intensidad/100` — intensidad=0 deja la imagen intacta, intensidad=100 aplica laplaciano puro, valores intermedios producen enfoque parcial. El deslizador tiene debounce de 100 ms vía setTimeout para colapsar eventos rápidos de arrastre. Limitación crítica — NO es enfoque de máscara-de-enfoque — la máscara-de-enfoque (USM) primero aplica un Gaussian blur al origen, después resta la copia desenfocada del original (USM = original + (original - desenfocado) × cantidad), produciendo una respuesta de bordes más sofisticada que es menos amplificadora-de-ruido que el laplaciano directo. El 'Smart Sharpen' de Photoshop, el 'Unsharp Mask' de GIMP, y el panel 'Sharpening' de Lightroom todos usan variantes USM. El enfoque laplaciano es computacionalmente más barato (una pasada de convolución, sin paso de blur separado) pero es más sensible a amplificación de ruido en bordes. Para orígenes con mucho ruido (fotos de ISO alto, capturas con artefactos JPEG), mantén la intensidad por debajo de ~30% para evitar amplificar grano junto al detalle real. El enfoque no puede recuperar información realmente ausente del origen — puede aumentar el contraste de bordes existentes pero no puede restaurar detalle que nunca se capturó (p. ej. fotos del todo desenfocadas, sujetos con motion blur).
- Kernel laplaciano de enfoque 3×3 `[0, -1, 0; -1, 5, -1; 0, -1, 0]` (4-conectado, método de segunda derivada según Gonzalez & Wintz / Gonzalez & Woods Digital Image Processing 1977)
- Intensidad ajustable 1-100% vía deslizador (con debounce de 100 ms vía setTimeout para colapsar eventos de arrastre)
- Convolución per-píxel de Canvas ImageData vía WHATWG ctx.getImageData + bucle anidado sobre Uint8ClampedArray + ctx.putImageData
- Mezcla por intensidad: `salida = original + (enfocado - original) × intensidad/100` — enfoque parcial en valores intermedios
- NO es máscara-de-enfoque (sin paso Gaussian blur — laplaciano es computacionalmente más barato pero más amplificador de ruido en bordes)
- Preserva el formato origen: PNG → PNG con alfa RGBA; JPG → JPG calidad 0,92 (Anexo K de ITU-T T.81)
- En el navegador vía WHATWG Canvas ImageData + bucle anidado de convolución + canvas.toBlob — sin subida
- Opera en sRGB (IEC 61966-2-1:1999); las imágenes origen sin perfil ICC embebido se interpretan como sRGB
Gratis. Sin registro. Sin subidas. Anuncios mediante AdSense (con consentimiento).
Fuentes (9)
- Gonzalez, R. C. & Wintz, P. A. (1977). Digital Image Processing (1st edition). Addison-Wesley 1977 (ISBN 0-201-02596-5) — the foundational textbook for digital image processing teaching; Paul A. Wintz was the original 1977 co-author with Rafael C. Gonzalez. Spatial filtering section covers the Laplacian operator and sharpening kernels: 4-connected Laplacian [0,-1,0;-1,4,-1;0,-1,0]; sharpening variant with centre +5 used as `image + Laplacian` for high-frequency edge boost. The 3×3 kernel [0,-1,0;-1,5,-1;0,-1,0] used by this tool is the canonical 4-connected sharpening kernel from this text.
- Gonzalez, R. C. & Woods, R. E. (2018). Digital Image Processing (4th edition). Pearson Education 2018 (ISBN 978-0-13-335672-4) — the 40-year-anniversary 4th edition; Richard E. Woods replaced Paul A. Wintz as Gonzalez's co-author starting the 1992 second edition (also Addison-Wesley). Section 3.6 of the 4th edition covers spatial filtering including the canonical 3×3 Laplacian sharpening kernel used by this tool.
- WHATWG (live). HTML Living Standard — Canvas 2D Context: getImageData(). html.spec.whatwg.org/#dom-context-2d-getimagedata — returns ImageData with Uint8ClampedArray of (R, G, B, A) bytes per pixel; the nested-loop Laplacian convolution iterates the array applying the 3×3 kernel to each interior pixel.
- WHATWG (live). HTML Living Standard — Canvas 2D Context: putImageData(). html.spec.whatwg.org/#dom-context-2d-putimagedata — writes the convolved Uint8ClampedArray back to the canvas.
- WHATWG (live). HTML Living Standard — HTMLImageElement (browser-native raster decoding). html.spec.whatwg.org/#htmlimageelement — universal browser entry point.
- WHATWG (live). HTML Living Standard — HTMLCanvasElement.toBlob(). html.spec.whatwg.org/#dom-canvas-toblob — re-encodes canvas pixel buffer to Blob.
- ITU-T (CCITT) Study Group VIII & ISO/IEC JTC 1/SC 29/WG 10 (JPEG) (1992). Information technology — Digital compression and coding of continuous-tone still images: Requirements and guidelines. ITU-T Recommendation T.81 (18 September 1992) / ISO/IEC 10918-1:1994 — JPEG baseline DCT bitstream; Annex K quantisation tables.
- W3C (PNG Working Group) (2003). Portable Network Graphics (PNG) Specification (Second Edition). W3C Recommendation 10 November 2003 / ISO/IEC 15948:2004 — PNG output format for lossless archiving.
- International Electrotechnical Commission (IEC) (1999). Multimedia systems and equipment — Colour measurement and management — Part 2-1: Default RGB colour space — sRGB. IEC 61966-2-1:1999 — default 8-bit RGB colour space the Canvas 2D path operates in.
Son las especificaciones del W3C, ISO/IEC, ITU-T e IETF que la herramienta implementa o sobre las que se apoya. Localízalas en w3.org, iso.org, itu.int o datatracker.ietf.org.
Por Marco B. ·