Skip to content
karim.semaan(open to work)
WorkExperienceAboutSkillsContactResume ↓
← All work
Image Processing Engine preview
Full-stackProtected2023

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.

Sample pattern · 256 px · 0 effects

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.

Processed locally, your file never leaves the browser.

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.

Protected work

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 access

Image 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.

Private · request access
Want something like this? Get in touch →
© 2026 Karim SemaanBuilt with Next.js, Tailwind & Supabase.LinkedIn ↗GitHub ↗