我正在尝试在MATLAB中编写Laplacian边缘检测过滤器。
我有4个嵌套的for循环。前两个遍历图像中的每个像素,后两个遍历该像素周围的9x9矩阵。对于每次迭代,代码将矩阵的每个单元乘以其对应的像素,然后将其加到矩阵的总和上。
问题在于,似乎前两个{} {3}}
中的前两个for循环仅迭代128次。我知道for循环没有问题,因为要进行调试,我将输出图像的每个像素设置为等于输入图像,并且在底部图像中可以正常工作。
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的内存溢出问题吗?运行该程序时,我的计算机上的CPU使用率不到50%,因此我怀疑这是问题所在。我也怀疑代码有问题,因为我已经对其进行了多次检查和测试,但是如果您发现任何问题,请不要犹豫指出!谢谢!