【发布时间】:2023-03-05 06:35:01
【问题描述】:
我有一张无噪点图像I。我想模拟添加到图像中的加性高斯噪声(零均值和变化v)n。 model 的输出是:
Z = I + n
为了模拟它,我们有两种方法:
- 创建高斯噪声并将其添加到图像中,
- 在 MATLAB 中使用
imnoise函数。
我使用了这两种方法,但它们给出了不同的结果。你能确定哪一个是正确的吗?为什么它们不相等?据我所知,我认为imnoise 是正确的。
在我的模拟中,我将噪声百分比定义为
“百分比噪声”数字表示高斯噪声的标准偏差与整个图像的信号的百分比。
I = imread('eight.tif');
[rows cols]=size(I);
I = double(I);
I = I - min(I(:));
I = I / max(I(:));
%% Percentage ratio
noise_per=0.4; %40 percent noise
%% Add noise to image
v = (noise_per*std(I(:)))^2 %// Option #2
%% Add noise by manual way
n=normrnd(0,v,[rows cols]);
I_noise1=I+n;
%% Add noise by imnoise func.
I_noise2 = imnoise(I, 'gaussian', 0, v);
subplot(131);imshow(n,[]);title('Gaussian noise');
subplot(132);imshow(I_noise1,[]);title('Add Gaussian noise #1');
subplot(133);imshow(I_noise2,[]);title('Add Gaussian noise #2');
【问题讨论】:
-
我测试了您的代码并在“I_noise1=I+n;”行中出现错误。它说矩阵尺寸必须一致。我没有原始的“eight.tif”,所以我不得不使用另一张图片
-
@VMMF:上面的代码假设一个灰度图像(如果图像是 RGB,则计算出错误的大小)
标签: matlab image-processing noise