[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/rbebb/parallelFinalProject/main/convolution.cpp [Back]  [Original]

#include 
#include 
#include 
#include 
#include "convolution.hpp"

using namespace std;

/**
 * Function that applies a supplied kernel to a supplied image.
 * 
 * @param *img buffer containing image data
 * @param *dims array of length 2 holding height and width of the image
 * @param **kernel odd-sized square matrix holding transformation kernel
 * @param k width of the kernel
 * @return *filtered filtered image
 */
int* convolute_image(int *img, int *dims, double **kernel, int k) {
    double a;
    int *filtered;

    filtered = (int*) malloc(dims[0] * dims[1] * sizeof(int));

    #pragma omp parallel for shared(filtered) private(a)
    for(int i = 0; i < dims[0]; i++) {
        for(int j = 0; j < dims[1]; j++) {
            a = 0.0;

            for(int ki = -(k/2); ki  dims[1] - 1)) {
                        continue;
                    } else {
                        double kval = kernel[kj + (k/2)][ki + (k/2)];
                        double ival = img[(i + ki) * dims[1] + (j + kj)];
                        a += kval * ival;
                    }
                }
            }

            if(a > 255) a = 255;
            if(a < 0) a = 0;
            filtered[(i * dims[1]) + j] = (int) a;
        }
    }

    return filtered;
}

Web Proxy Viewer  |  New URL  |  Original Page