UCT CSC2002 / 2022
Parallel neighbourhood filters
Serial and fork/join image filtering with neighbourhood windows and comparative timing experiments.
UCT / COURSE CONTEXT / 2022
CSC2002S · Computer Science 2002
Concurrent programming, computer architecture and interface design, with Java and assembler practicals.
ENGINEERING PERSPECTIVE
Inside the work
Compare two neighbourhood filters and explore how pixel work can be partitioned across fork/join tasks. It connects image quality, border correctness and parallel overhead rather than assuming parallel means faster.
- Java / ImageIO
- Read and write image pixels for serial and parallel mean/median implementations.
- Fork/join
- Recursively partition image width into vertical strips above a cutoff.
Read a neighbourhood
Collect channel values around the current pixel using the configured filter window.
- Mean vs median
- Mean averages channel samples; median sorts the neighbourhood values and selects a middle sample.
- Neighbourhood boundaries
- Window size and edge handling determine which input pixels contribute to each output.
- Parallel correctness
- Task-local state and disjoint output regions must be checked before trusting timings.
What the demonstration establishes
This page explains source and historical experiments; the old filter programs were not rerun for this enhancement. Original timing graphs are not new benchmark evidence.
Evidence behind this page
Four named sources and the individual 2022 PCP1 report, including width-based partitioning and cutoff experiments.
How it works
Read image pixels with ImageIO, apply channel-wise mean or median operations over windows and partition image processing into recursive parallel tasks.
Results & recovery
- Four named serial/parallel implementations and original result graphs were recovered.
Technical limitations
Not rerun in this launch pass; correctness at borders and shared mutable channel state need tests. Retained graphs are not promoted to fresh benchmark claims.
What I would improve now
Compare every output pixel against a serial reference, isolate task-local state and benchmark the same input with consistent timing boundaries.