Это часть моего кода, который вычисляет разницу. Он работает правильно, но это занимает много (из-за высоты и ширины).
- «Данные» - это растровое изображение серого изображения.
- «Фильтр» - это матрица [3,3].
- Максимальные значения "fh" и "fw" равны 3.
Я хочу ускорить этот код.
Я также пытался использовать параллель, но он не работал правильно (ошибка с выходом за пределы).
private float[,] Differentiate(int[,] Data, int[,] Filter)
{
int i, j, k, l, Fh, Fw;
Fw = Filter.GetLength(0);
Fh = Filter.GetLength(1);
float sum = 0;
float[,] Output = new float[Width, Height];
for (i = Fw / 2; i <= (Width - Fw / 2) - 1; i++)
{
for (j = Fh / 2; j <= (Height - Fh / 2) - 1; j++)
{
sum=0;
for(k = -Fw/2; k <= Fw/2; k++)
{
for(l = -Fh/2; l <= Fh/2; l++)
{
sum = sum + Data[i+k, j+l] * Filter[Fw/2+k, Fh/2+l];
}
}
Output[i,j] = sum;
}
}
return Output;
}