
Image Processing Engine
convolution filters · color transforms · Java/Swing
One engine, two front ends: a scriptable command pipeline and a Swing GUI both run the same thirteen image operations over a clean MVC core, so new filters slot in without rewriting the renderer.
Click an effect to apply it, effects stack. Focus the image and press an effect key (shown on each button), C to compare, R to reset. Compare holds the original for an A/B look. Reset undoes everything to the source.
Sample test pattern loaded. Apply an effect to begin.
A browser port of the Java engine: the same blur, sharpen, sepia, greyscale, flip and brighten operations run on a canvas. Any image you upload is processed locally and never leaves your browser.
The source for this course project is kept private. Request access through the contact form and I will gladly share the code and walk through it.
Request accessImage Processing Engine loads, transforms and saves raster images across four formats (PPM, PNG, JPG, BMP) through a clean MVC architecture. The model represents each image as separate red, green and blue matrices and applies effects through a single IEffect strategy interface: 3x3 convolution blur and 5x5 sharpen kernels, luma greyscale and sepia color-matrix transforms, horizontal and vertical flips, percentage brighten and darken, and six channel-isolating greyscale variants (red, green, blue, value, intensity, luma) produced by a factory. A command engine maps text scripts of the form effect, image-name, new-image-name onto handlers (the Command interface extends Java's Consumer), so an image can be loaded, piped through a chain of effects and saved without touching the UI. A Swing GUI wraps the same model with File and Edit menus and renders a live RGB histogram of the working image. The interfaces for filters and color transformations are deliberately open for extension so new kernels and matrices drop in without rewriting the pipeline.
- Java
- Swing
- javax.imageio
- JUnit
- Convolution
- MVC
- Command pattern
- Strategy pattern
- Operations
- 13 image effects
- Convolution
- 3x3 blur · 5x5 sharpen
- Formats
- PPM · PNG · JPG · BMP
- Tests
- 7 JUnit suites
What I'd improve
The effects run pixel by pixel on plain matrices, which is fine for coursework images but would crawl on large photos. With more time I would separate the kernel math from the image representation behind a buffer abstraction, then make convolution operate on flat typed arrays so the hot loop stays cache-friendly and could later move to multithreaded tiles or the GPU. I would also widen the test suite past the current per-class unit files into end-to-end script runs that assert on saved-file bytes.