{"id":26635978,"url":"https://github.com/josedavila24/imageprocessor2d","last_synced_at":"2026-05-21T05:02:47.026Z","repository":{"id":283701549,"uuid":"950262469","full_name":"JoseDavila24/ImageProcessor2D","owner":"JoseDavila24","description":"🖼️✨ Herramienta de procesamiento de imágenes 2D en Java con interfaz gráfica 🎨📌. Incluye filtros 🌀, conversiones de color 🌈 y operaciones morfológicas 🔍⚙️.","archived":false,"fork":false,"pushed_at":"2025-03-28T20:48:55.000Z","size":14469,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-28T21:27:20.499Z","etag":null,"topics":["eclipse-ide","git","gui","image-processing","java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JoseDavila24.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-17T22:18:26.000Z","updated_at":"2025-03-28T20:48:58.000Z","dependencies_parsed_at":"2025-03-21T17:45:11.764Z","dependency_job_id":null,"html_url":"https://github.com/JoseDavila24/ImageProcessor2D","commit_stats":null,"previous_names":["josedavila24/imageprocessor2d"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JoseDavila24/ImageProcessor2D","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseDavila24%2FImageProcessor2D","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseDavila24%2FImageProcessor2D/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseDavila24%2FImageProcessor2D/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseDavila24%2FImageProcessor2D/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JoseDavila24","download_url":"https://codeload.github.com/JoseDavila24/ImageProcessor2D/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseDavila24%2FImageProcessor2D/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263331769,"owners_count":23450155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eclipse-ide","git","gui","image-processing","java"],"created_at":"2025-03-24T16:15:51.915Z","updated_at":"2026-05-21T05:02:41.983Z","avatar_url":"https://github.com/JoseDavila24.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Procesamiento de Imágenes 2D ✨\n\nEste proyecto consiste en una aplicación de escritorio en Java para realizar operaciones de procesamiento de imágenes en 2D. Incluye una interfaz gráfica (Swing) que permite **abrir**, **guardar** y **cerrar** imágenes, así como aplicar **filtros** y **transformaciones** como binarización, escala de grises, suavizado, realce, morfología, etc.\n\n## 💡 **Descripción General**\nEste es un sistema de procesamiento de imágenes en 2D con interfaz gráfica construida con **Swing**, que permite:\n- Abrir, mostrar, guardar imágenes\n- Convertir imágenes a escala de grises, binarizarlas, aplicar negativos\n- Visualizar histogramas de intensidad\n- Aplicar filtros (media, mediana, Sobel, Prewitt, etc.)\n- Aplicar transformaciones morfológicas (erosión, dilatación, apertura, cierre, esqueletonización)\n\n---\n\n## 🧱 Estructura de Clases\n\n| Clase             | Rol                                                                 |\n|------------------|----------------------------------------------------------------------|\n| `Main`           | Punto de entrada. Carga la interfaz `Menu`                           |\n| `Menu`           | Ventana principal con menú, imagen y lógica de interacción           |\n| `Operaciones`    | Procesamiento de imágenes (filtros, transformaciones, morfología)    |\n| `HistogramaPanel`| Panel que dibuja gráficamente un histograma de intensidades          |\n\n---\n\n## 🎨 Interfaz Gráfica (`Menu`)\nSe trata de una **ventana Swing `JFrame`** con un menú rico en funcionalidades:\n\n**Menús disponibles:**\n- **Archivo**: Abrir, guardar, guardar como, cerrar\n- **Edición**: Deshacer, rehacer\n- **Imagen**: Escala de grises, binarización, negativo, histograma\n- **Filtros**:\n  - Suavizado: Media, Mediana\n  - Realce: Sobel, Prewitt, Laplaciano\n  - Morfológicos: Erosión, Dilatación, Apertura, Cierre, Esqueletonización\n  - Frecuencia: Filtro paso bajo, alto y banda\n\nIncluye soporte para:\n- Redimensionar la imagen al tamaño del panel\n- Pila de deshacer/rehacer con `Stack\u003cBufferedImage\u003e`\n\n---\n\n## 🧪 Procesamiento de Imagen (`Operaciones`)\nContiene todos los algoritmos implementados:\n\n### 🔧 Operaciones Básicas\n- Escala de grises\n- Negativo\n- Imagen binaria (según umbral)\n\n### 📊 Histograma\n- Cálculo de histograma\n- Visualización con `HistogramaPanel`\n\n### ✨ Filtros de suavizado\n- Media: con máscara de tamaño arbitrario\n- Mediana: igual, usando ordenamiento por canal\n\n### 🪓 Filtros de bordes\n- **Sobel** y **Prewitt**: detección de bordes por convolución\n- **Laplaciano**: detección de bordes mediante segunda derivada\n\n### ⚙️ Morfología Binaria\n- Erosión y dilatación 3x3\n- Apertura = erosión + dilatación\n- Cierre = dilatación + erosión\n- Esqueletonización: por diferencias morfológicas iterativas\n\n### 🌀 Filtros de frecuencia\n- Paso bajo: usando filtro de media\n- Paso alto: original - difuminado\n- Paso banda: simulado, retornando imagen sin procesar (mejorable)\n\n---\n\n## 📊 Histograma (`HistogramaPanel`)\nClase que **extiende `JPanel`** y sobrescribe `paintComponent` para dibujar:\n- Ejes X/Y\n- Barras verdes representando la frecuencia\n- Etiquetas en los ejes\n- Títulos\n\nDiseño cuidado y escalable. Muy visual.\n\n---\n\n## ⚙️ Detalles técnicos destacados\n\n✅ Buen uso de programación funcional (`Function`, `@FunctionalInterface`)\n\n✅ Uso de `BufferedImage` y manipulación a nivel de pixel\n\n✅ Separación clara entre UI (`Menu`) y lógica (`Operaciones`)\n\n✅ Manejo de errores con `JOptionPane`\n\n✅ `Undo/Redo` correctamente implementado con copia profunda (`copyImage`)\n\n✅ `ParallelStream` usado en algunos métodos como escala de grises para eficiencia\n\n---\n\n## Capturas de pantalla 📸\n\nA continuación se muestran algunas capturas del programa en funcionamiento. Si prefieres verlas en GitHub, haz clic en cada imagen:\n\n#### 1. Ventana principal\n![Ventana principal](https://github.com/JoseDavila24/ImageProcessor2D/blob/6edac930c2067a2ad0d4568c4b0adb4e0fe5f4cd/img/Ventana%20Principal.png?raw=true)\n\n#### 2. Menú de opciones\n![Menú de opciones](https://github.com/JoseDavila24/ImageProcessor2D/blob/6edac930c2067a2ad0d4568c4b0adb4e0fe5f4cd/img/Menu_de_opciones.png?raw=true)\n\n#### 3. Abrir imagen\n![Abrir imagen](https://github.com/JoseDavila24/ImageProcessor2D/blob/6edac930c2067a2ad0d4568c4b0adb4e0fe5f4cd/img/Abrir_imagen.png?raw=true)\n\n#### 4. Aplicar un filtro\n![Aplicar un filtro](https://github.com/JoseDavila24/ImageProcessor2D/blob/6edac930c2067a2ad0d4568c4b0adb4e0fe5f4cd/img/Aplicar_un_filtro.png?raw=true)\n\n---\n\n### 🎯 **Prepara la imagen antes del filtro**\n\n| Filtro                  | Preprocesamiento recomendado                        | Caso de uso típico                                         | Qué observar 🔎                                         |\n|------------------------|-----------------------------------------------------|------------------------------------------------------------|----------------------------------------------------------|\n| **Escala de grises**   | Imagen a color con muchos tonos                     | Convertir imagen a una sola dimensión de intensidad        | Se eliminan colores, solo queda la información de luz    |\n| **Binarización**       | Escala de grises                                   | Segmentar zonas claras/oscura (texto, formas, OCR)        | Todo se vuelve blanco o negro según umbral               |\n| **Negativo**           | Cualquier imagen                                    | Efecto visual inverso, análisis médico o artístico         | Invierten luces y sombras; zonas claras ↔️ oscuras        |\n| **Histograma**         | Escala de grises para más claridad                  | Ver distribución de intensidad; útil en contraste y umbral | Picos y valles indican concentración de valores grises   |\n| **Filtro de media**    | Imagen con ruido o texturas                         | Suavizar imagen, difuminar zonas, reducción de ruido leve | Imagen se ve más borrosa, bordes pierden nitidez         |\n| **Filtro de mediana**  | Imagen con \"sal y pimienta\", píxeles aislados      | Eliminar ruido impulsivo sin dañar bordes                 | Bordes preservados, ruido blanco/negro desaparece         |\n| **Filtro Sobel**       | Escala de grises o binaria                          | Detectar bordes en direcciones diagonales                 | Se resaltan contornos fuertes                            |\n| **Filtro Prewitt**     | Escala de grises o binaria                          | Alternativa a Sobel (más suave)                           | Bordes con algo menos de contraste                       |\n| **Filtro Laplaciano**  | Escala de grises                                   | Detectar todos los bordes sin importar dirección          | Muestra contornos internos con alta sensibilidad         |\n| **Erosión**            | Imagen binaria                                     | Eliminar ruido blanco, adelgazar objetos                  | Zonas blancas se achican; bordes retroceden              |\n| **Dilatación**         | Imagen binaria                                     | Rellenar huecos, unir componentes                         | Zonas blancas se expanden                                |\n| **Apertura**           | Imagen binaria con puntos blancos pequeños         | Suaviza contornos y elimina pequeños puntos aislados      | Formas más limpias, sin ruido blanco                     |\n| **Cierre**             | Imagen binaria con huecos pequeños                 | Cierra agujeros dentro de objetos blancos                 | Huecos desaparecen, formas se rellenan                  |\n| **Esqueletonización**  | Escala de grises → Binarización                    | Obtener forma delgada de objetos (análisis estructural)   | Figuras reducidas a su “esqueleto” o centro estructural  |\n| **Filtro paso bajo**   | Imagen con texturas o ruido uniforme               | Suavizar o eliminar detalle fino                          | Imagen borrosa, menos detalle pero más homogénea         |\n| **Filtro paso alto**   | Imagen con bajo contraste o detalles suaves        | Resaltar bordes o detalles finos                          | Realce de texturas, bordes más notorios                 |\n| **Filtro paso banda**  | Imagen con detalles medios; aplicar post paso bajo | Ver estructura intermedia (ni ruido ni fondo plano)       | Texturas intermedias resaltadas; ni muy suaves ni duros |\n\n---\n\n## Documentación adicional 📄\n\nPara mayor detalle sobre la **implementación** y la **teoría** de las operaciones de imagen, revisa el documento **[DocOperaciones.pdf](https://github.com/JoseDavila24/ImageProcessor2D/blob/d9a11d2c0cf3bf4678475188a5536f656083ef44/DocOperaciones.pdf)** incluido en el repositorio. Allí encontrarás descripciones más técnicas de cada filtro y su lógica interna (El codigo fuente de la documentacion esta en [Operaciones.tex](https://github.com/JoseDavila24/ImageProcessor2D/blob/d9a11d2c0cf3bf4678475188a5536f656083ef44/Operaciones.tex) ).\n\n## Requisitos previos ✅\n\n- **Java 8** o posterior (JDK o JRE) instalado en tu sistema.\n- (Opcional) Un IDE como IntelliJ IDEA, Eclipse o NetBeans para abrir y compilar el proyecto con mayor facilidad.\n- **Git** para clonar el repositorio (si planeas descargarlo desde GitHub).\n\n## Clonar y ejecutar en Windows\n\n### Opción A: Ejecutar directamente el **ImageProcessor2D.jar** ⚙️\n\n1. **Descarga o copia** el archivo `ImageProcessor2D.jar` en una carpeta de tu elección.\n2. **Asegúrate** de tener Java correctamente instalado y accesible desde la línea de comandos (o que los archivos JAR se abran con Java por defecto).\n3. **Abre** una ventana de **Símbolo del sistema** (CMD) o **PowerShell** y navega hasta la carpeta donde tengas el `ImageProcessor2D.jar`. Por ejemplo:\n   ```bash\n   cd C:\\Users\\TuUsuario\\Documents\\ImageProcessor2D\n   ```\n4. **Ejecútalo** con el siguiente comando:\n   ```bash\n   java -jar ImageProcessor2D.jar\n   ```\n   Esto abrirá la ventana de la aplicación con la interfaz gráfica.\n\n   \u003e **Alternativa:** Si en tu sistema Windows los archivos JAR se abren con doble clic (y Java está correctamente asociado), simplemente haz doble clic sobre `ImageProcessor2D.jar`.\n\n### Opción B: Compilar manualmente los archivos `.java` ⚙️\n\nSi prefieres compilar el proyecto en lugar de usar el `.jar`:\n\n1. **Clona el repositorio** (si aún no lo has hecho):\n   ```bash\n   git clone https://github.com/JoseDavila24/ImageProcessor2D.git\n   ```\n2. **Navega** hasta la carpeta del proyecto:\n   ```bash\n   cd ImageProcessor2D\n   ```\n3. **Compila** los archivos `.java`:\n   ```bash\n   javac Menu.java Operaciones.java\n   ```\n4. **Ejecuta** la clase principal (asegúrate de que sea `Main` o `Menu`, según tu código real):\n   ```bash\n   java Main\n   ```\n\n## Contribuciones 🙌\n\nRevisa el documento llamado [CONTRIBUTING.md](https://github.com/JoseDavila24/ImageProcessor2D/blob/bc21b65cbdc9db96a15e4208ba32c59b0a06346e/CONTRIBUTING.md) dentro de este repositorio.\n\n## Licencia 📜\n\nEste proyecto está licenciado bajo los términos de la Licencia MIT.  \nPor favor, revisa el archivo [LICENSE](https://github.com/JoseDavila24/ImageProcessor2D/blob/main/LICENSE) para más detalles.\n\n## Referencias\n\nJercyae. (n.d.). GitHub - jercyae7/editor-de-imagenes: manipulacion de imagenes. GitHub. https://github.com/jercyae7/editor-de-imagenes.git\n\nTorres, A. D. (1996). Procesamiento digital de imágenes. Perfiles Educativos, 72. https://www.redalyc.org/pdf/132/13207206.pdf\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosedavila24%2Fimageprocessor2d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosedavila24%2Fimageprocessor2d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosedavila24%2Fimageprocessor2d/lists"}