【问题标题】:Applying a Gaussian Filter using no built-in MatLab functions [duplicate]不使用内置 MatLab 函数应用高斯滤波器 [重复]
【发布时间】:2017-02-17 15:43:21
【问题描述】:

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

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

【问题讨论】:

  • 您认为什么是“内置”?技术上floorimreadzeros等都是内置的
  • 对不起,我应该更具体。他只是说,“不要使用任何内置函数来构建高斯滤波器或执行卷积。”我们不能使用任何过滤函数,卷积函数等。因为我没有太多的Matlab知识,所以很难解释。我们只学习了基本功能,所以我们只能使用这些功能。

标签: matlab image-processing filter gaussian


【解决方案1】:

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

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

我希望这是有道理的。

干杯,

【讨论】:

    【解决方案2】:

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

    1. 傅立叶变换图像(每个组件的组件)
    2. 将每个转换后的分量逐个元素与包含频率空间中滤波器的矩阵相乘。
    3. 傅里叶变换回来,并删除您的过滤器引入的小复杂部分。

    当然,如果您认为 fft 是一个被禁止的内置函数,那么这不符合条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 2013-03-29
      • 2011-10-22
      • 2011-02-15
      • 1970-01-01
      • 2014-07-21
      • 2023-04-09
      • 2012-04-26
      相关资源
      最近更新 更多