Я пытаюсь закодировать фильтр обнаружения лапласовых краев в MATLAB.
У меня есть 4 вложенных цикла.Первые два перебирают каждый пиксель изображения, а последние два перебирают матрицу 9x9 вокруг этого пикселя.Для каждой итерации код умножает каждую ячейку матрицы на соответствующий ей пиксель и добавляет к сумме для матрицы.
Проблема в том, что первые два цикла for повторяются только 128 раз, как показано на верхнем изображении здесь.
Я знаю, что сдля циклов, потому что для отладки я устанавливаю каждый пиксель выходного изображения равным входному изображению, и оно отлично работает, как видно на нижнем изображении.
for x = 1: imgWidth
for y = 1: imgHeight
sum = 0;
for maskX = (-1 * n):(n)
for maskY = (-1*n): (n)
if ((x + maskX) >= 1 && (x + maskX) <= imgWidth && (y + maskY) >= 1 && (y + maskY) <= imgHeight)
sum = sum + int16(IMG(x + maskX,y + maskY)) * int16(mask(maskX + n + 1,maskY + n + 1)) ;
end
end
end
finalValue = (sum - minSum)/mult;
rFinal(x,y) = finalValue;
end
end
Результатом должны быть края основного изображения.Если края нет, пиксель должен иметь значение 127, но если он есть, одна сторона края будет очень темной, содержащей меньшее значение пикселя, а другая сторона края должна быть яркой и содержать более высокуюзначение пикселя.Это относится к первому блоку размером 128x128 пикселей, однако для остальной части изображения результат является неожиданным.Независимо от того, какой размер изображения я ввожу, результат будет правильным только для этого небольшого блока 128x128.
Кто-нибудь знает, почему это происходит?Может ли быть проблема переполнения памяти с MATLAB?Когда я запускаю программу, на моем компьютере используется менее 50% процессора, поэтому я сомневаюсь, что это проблема.Я также сомневаюсь, что с кодом что-то не так, поскольку я просмотрел его и несколько раз протестировал, но, если вы найдете что-то, не стесняйтесь указывать на это!Спасибо!