Как здесь происходит распараллеливание? Функция для фильтра гаусса, циклами проходится по окрестностям изображения и в каждой точке окрестности вычисляет значение для результата.
Matrix OmpGauss(const Matrix& mat, int height, int width, int R, double sigma) {
Matrix finMat(height, std::vector<double>(width));
Matrix kernel = GaussKernel(R, sigma);
#pragma omp parallel
{
#pragma omp for collapse(2) schedule(static)
for (int64_t x = 0; x < height; x++) {
for (int64_t y = 0; y < width; y++) {
int finValue = 0;
for (int64_t i = -R; i <= R; i++) {
for (int64_t j = -R; j <= R; j++) {
double value = mat[x][y];
finValue += value * kernel[i + R][j + R];
}
}
finValue = clamp(finValue, 255, 0);
finMat[x][y] = finValue;
}
}
}
return finMat;
}