不使用内置 MatLab 函数应用高斯滤波器

Applying a Gaussian Filter using no built-in MatLab functions

我是 Matlab 新手。我真的刚刚开始学习我专业的实际计算机科学 类。所以,请记住这一点。目标是在不使用内置函数的情况下创建高斯滤波器并将其应用于此特定图像。到目前为止,我有这段代码可以创建内核。我们尝试使用不同的 sigma 值,然后生成内核的可视化。

    f = imread( 'input.png');

    sig = 5;
    hw = floor (2.5 * sig - .5);

    w = zeros(hw*2+1, hw*2+1);

    for r = 1:size(w,1)
        for c = 1:size(w,2)
            w(r,c) = exp(-1 * ((c - (hw+1))^2 + (r-hw)^2) / (2 * sig^2));
        end
    end

    imagesc(w);
    colormap jet;

我的问题是在实际应用时出现的。我真的不知道该怎么做。他给了我们以下代码作为指导,但我还是卡住了。

    for r = 1:R
        for c = 1:C
            for r1 = 
                for c1 = 
                   temp = temp + f() + w();
                end
            end
        end
    end

如果有人能指出我正确的方向,将不胜感激。谢谢。

假设这是 class 中给您的教程问题,我会给您提示以继续。

  • 应该使用外两个循环来遍历整个图像。您需要根据您使用的内核大小放置适当的 R 和 C。 (你必须避开边界,这样你的内核就不会超出图像。)
  • 在内部两个循环开始之前,您必须将温度重置为零,r1 和 c1 必须在 1 到内核大小之间变化。
  • f() 和 w() 应该相乘并添加到 temp 中以有效地进行卷积。现在您的任务是计算出用于 f 和 w 的适当索引。
  • 并且您需要在适当的地方用温度更新当前像素值。

我希望这是有道理的。

干杯,

如果你愿意使用快速傅立叶变换,一切都会变得简单:

  1. 对图像进行傅里叶变换(每个分量)
  2. 将每个变换后的分量 element-by-element 与包含频率为 space 的过滤器的矩阵相乘。
  3. 傅里叶变换回来,并删除你的过滤器引入的小复杂部分。

当然,如果您认为 fft 是禁止的内置函数,则不符合条件。