Чтобы выполнить размытие по Гауссу, у меня есть три вложенных цикла for. Один проходит через каждую строку изображения, следующий проходит через каждый пиксель в строке, а третий выполняет свертку на основе ранее определенного ядра.
На этом этапе изображение представляет собой двумерный массив значений интенсивности размером 1024 x 1024.
Когда я использую операторы if для обнаружения ситуаций, когда я выхожу за пределы массива, время выполнения для каждой строки получается равным 0 мс, используя секундомер.
Код: Выделить всё
for (int y = 1; y < Height - 1; y++)
{
for (int x = 1; x < Width - 1; x++)
{
int NewValue = 0;
for (int i = 0; i < Kernel.Length; i++)
{
int Position = x + i - sigma * 3;
if (Position < 0 || Position > Width - 1)
{
NewValue += 0;
}
else
{
NewValue += (int)(SourceArray[y, Position] * Kernel[i]);
}
}
OutputArray[y, x] = NewValue;
}
Код: Выделить всё
for (int y = 1; y < Height - 1; y++)
{
for (int x = 1; x < Width - 1; x++)
{
int NewValue = 0;
for (int i = 0; i < Kernel.Length; i++)
{
int Position = x + i - sigma * 3;
try
{
NewValue += (int)(SourceArray[y, Position] * Kernel[i]);
}
catch (Exception e)
{
NewValue += 0;
}
}
OutputArray[y, x] = NewValue;
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ecution-ti
Мобильная версия