我尝试创建一个高斯噪声蒙版,该蒙版应以大小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循环。由于某种原因,它不想运行。有人可以向我解释我做错了什么吗?
这是我的输出图像:
。
答案 0 :(得分:0)
您在高斯方程中有一个错误。您写道:
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 ) );
^ ^
请注意添加的括号!您在第一个代码段中包含了这些,但是在第二个代码段中却忘记了它们。