对于matlab中的循环,仅重复128次

时间:2019-05-03 17:42:34

标签: matlab

我正在尝试在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%,因此我怀疑这是问题所在。我也怀疑代码有问题,因为我已经对其进行了多次检查和测试,但是如果您发现任何问题,请不要犹豫指出!谢谢!

1 个答案:

答案 0 :(得分:0)

要使用IMG给出的线性过滤器过滤图像mask,请使用conv2

conv2(IMG,mask,'same');