Я работаю над обработкой изображений на C # и реализую интегральную гистограмму. Я не буду вдаваться в подробности, но предположим, что у меня есть матрица MxN, и каждое значение ячейки является суммой себя и своего левого и верхнего соседа, минус соседний левый верхний угол. Это работает быстро, но я хочу сделать это быстрее для больших изображений или для обработки изображений в реальном времени.
matrix[i,j] += matrix[i-1,j] + matrix[i,j-1] - matrix[i-1,j-1];
Фактическая реализация:
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
{
int left = 0, upper = 0, u_l_corner = 0;
if (j - 1 >= 0)
{
left = matrix[i, j - 1];
}
if (i - 1 >= 0)
{
upper = matrix[i - 1, j];
}
if (j - 1 >= 0 && i - 1 >= 0)
u_l_corner = matrix[i - 1, j - 1];
matrix[i, j] += left + upper - u_l_corner;
}
Таким образом, расчет зависит от предыдущих значений ячеек. Поэтому не похоже, что это может быть реализовано параллельно (по крайней мере, для меня). Но все же, просто хочу убедиться, прежде чем идти дальше ..
Может ли этот алгоритм быть реализован параллельно с использованием Parallel.For или любого другого метода в C #? Если так, то простой пример высоко ценится, но если нет, то мне лучше поработать над поиском «алгоритма параллельной гистограммы изображений», если таковой существует.
Заранее спасибо.