Parallel Programming with the Java Fork/Join framework: 1D Median filter Median filtering is a nonlinear digital filtering technique that is often used to remove noise from a data set. Noise reduction is usually a pre-processing step to that improves or “cleans” the data in preparation for later processing. In this method, a median filter slides over the data item by item, generating a new data set, where each item is replaced by the median of neighbouring entries. An example result for a 1D data set is shown in the image below. The size of the filter determines the number of neighbours considered for the median. In this assignment, you will consider only one-dimensional data sets and filters of odd size, ranging from 3 to 21 data items. For example, a median filter of size 3 applied to the simple 1D array x: x = [2 80 6 3 1] produces output array y: y = [2 6 6 3 1] where each element of y is calculated as follows: y = Median[2 80 6] = 6 y = Median[80 6 3] = 6 y = Median[6 3 1] = 3 Note that the borders are not changed and that the size of the borders depends on the filter width. In this example the border is 1 element. The naïve approach to median filtering sorts the elements within the filter window at each step to calculate the median (which will then be the middle element). Using this naïve approach (which we will do in this assignment) the median computation can be quite expensive, especially if the filter window is large. Therefore, in this assignment you will attempt to parallelize the problem in order to speed it up. You will: • Use the Java Fork/Join framework to parallelize the median filter operation using a divide-andconquer algorithm. • Evaluate your program experimentally: o Using high-precision timing to evaluate the run times of your serial and your parallel method, across a range of input sizes and a range of filter sizes, and o Experimenting with different parameters to establish the limits at which sequential processing should begin. • Write a report that lists and explains your findings. Note that parallel programs need to be both correct and faster than the serial versions. Therefore, you need to demonstrate both correctness and speedup for your assignment.