Answers for "Parallel Median Filter"

-1

Parallel Median Filter

//import everything

public class SecondMedianFilter extends RecursiveAction {
    float[] numbers;
    static int filter;
    int window;
    int length;
    int lo;
    int hi;

    static final int SEQUENTIAL_CUTOFF = 500;


    float[] outArray;

    public SecondMedianFilter(float[] numbers, int filter, int lo, int hi) {
        this.numbers = numbers;
        this.filter = filter;
        this.lo = lo;
        this.hi = hi;
        length = numbers.length;
        window = (filter - 1) / 2;
    }

    public float[] getRes() {
        return result;
    }


    protected void compute() {

        result = new float[length];

        if ((hi - lo) < SEQUENTIAL_CUTOFF) {

            for (int a = lo; a < hi; a++) {


                for (int i = 0; i < length; i++) {
                    if (i < window || i >= length - window) {
                        result[i] = numbers[i];
                    } else {
                        float[] subArray = Arrays.copyOfRange(numbers, i - window, i + window + 1);
                        Arrays.sort(subArray);
                        float median = subArray[(subArray.length / 2)];
                        result[i] = median;

                    }
                }

            }
        } else {

            SecondMedianFilter left = new SecondMedianFilter(filtered, filter, lo, (hi + lo) / 2);
            SecondMedianFilter right = new SecondMedianFilter(filtered, filter, (hi + lo) / 2, hi);
            left.fork();
            right.compute();
            left.join();
        }
    }


    public static void main(String[] args) {
        //reads in a file, processes each line into an array of floats that
        // I call inArray, which gets filtered into outIntArray


        float[] outIntArray = new float[inArray.length];

        if (window < 3 || window > 21 || window % 2 == 0) {
            System.out.println("Window size error.");
        } else {

            SecondMedianFilter smf = new SecondMedianFilter(inArray, window, 0, inArray.length);
            smf.compute();
            outIntArray = smf.getRes();


            // loops through outIntArray and writes to file.
        }//end main           
    }
}
Posted by: Guest on August-18-2021
-1

Parallel Median Filter

public class SecondMedianFilter extends RecursiveAction {
... 

protected void compute() {

    result = new float[length];

    if ((hi - lo) < SEQUENTIAL_CUTOFF) {

        for (int a = lo; a < hi; a++) {


            for (int i = 0; i < length; i++) {
                if (i < window || i >= length - window) {
                    result[i] = numbers[i];
                } else {
                    float[] subArray = Arrays.copyOfRange(numbers, i - window, i + window + 1);
                    Arrays.sort(subArray);
                    float median = subArray[(subArray.length / 2)];
                    result[i] = median;

                }
            }

        }
    } else {

        SecondMedianFilter left = new SecondMedianFilter(filtered, filter, lo, (hi + lo) / 2);
        SecondMedianFilter right = new SecondMedianFilter(filtered, filter, (hi + lo) / 2, hi);
        left.fork();
        //CODE CHANGES FROM HERE
        right.fork();
        //right.compute(); <- IS IMPLICIT IN THE FORK 
        left.join();
        right.join();
        //TO HERE
    }
}


public static void main(String[] args) {
    //reads in a file, processes each line into an array of floats that
    // I call inArray, which gets filtered into outIntArray


    float[] outIntArray = new float[inArray.length];

    if (window < 3 || window > 21 || window % 2 == 0) {
        System.out.println("Window size error.");
    } else {
        // CODE CHANGES FROM HERE
        ForkJoinPool pool = new ForkJoinPool(); // WHO HANDLES THE THREADS 
        SecondMedianFilter smf = new SecondMedianFilter(inArray, window, 0, inArray.length);
        //smf.compute(); <- DUTY OF THREAD POOL
        pool.invoke(smf); //  START OF PROCESSING 
        outIntArray = smf.getRes();


        // loops through outIntArray and writes to file.
    }//end main           
}
Posted by: Guest on August-18-2021

Browse Popular Code Answers by Language