【问题标题】:Create centered gaussian blur mask on image在图像上创建居中的高斯模糊蒙版
【发布时间】:2018-11-13 00:09:19
【问题描述】:

我尝试创建一个高斯噪声掩码,它应该覆盖在我的图像上,尺寸为 sizeX、sizeY。我已经找到了一种使用 meshgrid 函数的方法,并且效果很好:

function gaussian = GetGaussNoiseImage(sizeX, sizeY, A, std) 
indicator = -floor(sizeX/2) : floor(sizeY/2);
[X Y] = meshgrid(indicator, indicator);
h = exp(-(X.^2 + Y.^2) / (2*std^2));
mesh(h);

我的第一个方法是:

function gaussian = GetGaussNoiseImage(sizeX, sizeY, A, std)
[sizeX sizeY] = size(I)
centerX = sizeX/2;
centerY = sizeY/2;
gaussian = zeros(sizeX, sizeY); 

for i = 1:sizeX
    for j = 1:sizeY
        gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/2*std^2);
    end
end
mesh(gaussian);

对我来说,这是完全相同的方法,不同之处在于包含两个 for 循环。出于某种原因,它不想运行。谁能向我解释我做错了什么?

这是我的输出图像:

.

【问题讨论】:

  • “不想工作”是什么意思?它导致了错误?它没有显示正确的结果?怎么了?显示预期和当前的输出以帮助...
  • 无论我如何更改参数(std、A、图像大小等),我都会得到一个零乘零矩阵...
  • std 是要更改的参数。但是你想做什么?高斯模糊是通过卷积高斯核实现的,而不是通过覆盖它。
  • 是的,这是正确的,但这是我检查它是否有效的方式。通过叠加我的意思是我想要一个位于在 sizeX/2 和 sizeY/2 的中间。抱歉,它可能有点“草率”;-)

标签: image matlab image-processing gaussian


【解决方案1】:

您的高斯方程有误。你写:

gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/2*std^2);

但你应该这样做:

gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/ ( 2*std^2 ) );
                                                                  ^         ^

注意添加的括号!您在第一个代码 sn-p 中有这些,但在第二个代码中忘记了它们。

【讨论】:

  • 非常感谢您的大力帮助!这些是我似乎总是忘记的事情......
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多