使用没有内置MatLab函数的高斯滤波器

时间:2017-02-17 01:31:07

标签: matlab image-processing filter gaussian

我是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

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

2 个答案:

答案 0 :(得分:3)

假设这是课堂上给你的教程问题,我会给你提示继续。

  • 应使用外部两个循环遍历整个图像。您需要根据所使用的内核大小放置适当的R和C. (你必须避开边界,以免你的内核不在图像之外。)
  • 在内部两个循环开始之前,必须将temp重置为零,r1和c1必须从1到内核大小不等。
  • f()和w()应该相乘并添加到temp中以有效地进行卷积。现在你的任务是找出用于f和w的适当索引。
  • 您需要在适当的位置使用temp更新当前像素值。

我希望这是有道理的。

干杯,

答案 1 :(得分:1)

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

  1. 傅里叶变换图像(每个组件的组件)
  2. 将每个转换后的组件逐个元素与包含频率空间中的过滤器的矩阵相乘。
  3. 傅里叶变换回来,并删除过滤器引入的小复杂部分。
  4. 当然,如果你认为fft是一个被禁止的内置,这不符合条件。