向矢量添加噪声

时间:2014-07-25 15:32:30

标签: image-processing vector matlab

我有一个带浮点数的向量,例如:

Vect = [15.123, 21.345, 35.567, 45.362];

我需要的是将高斯噪声仅应用于小数点后的数字。例如,取矢量[123,345,567,362],然后在其上应用噪声。因此,请替换Vect中的噪声向量。

我知道要添加高斯噪声,可以按如下方式执行:

noisy_vector = imnoise(Vect, 'gaussian');

但我感兴趣的是只将噪音添加到Vect中的小数点后面的数字(自动)以获得嘈杂的Vect

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

试试这段代码:

Vect = [15.123, 21.345, 35.567, 45.362];
dec=cellfun(@num2str,num2cell(Vect),'UniformOutput',false);
Vect_dec=regexp(dec,'\.','split');
mat=vertcat(Vect_dec{:});
dec_col=str2num(str2mat(mat(:,2)));
noisy_vector = imnoise(dec_col, 'gaussian');

此代码将分隔向量中每个条目的小数点后的数字,然后将高斯噪声应用于它。 请注意,这仅适用于包含所有浮点数vector

答案 1 :(得分:1)

您可以使用randn()函数从零均值的正态分布生成随机数,标准差为1.大多数的绝对值小于1.如果您真的担心如果不更改元素的整数部分,则可以将随机数除以10。

答案 2 :(得分:1)

你不能添加高斯噪声,并且小数点前的数字始终保持不变,因为高斯随机变量可以取-infinity和+ infinity之间的值

如果你想将小数点后面的数字随机化,只有它们,你可以这样做

Vect = [15.123, 21.345, 35.567, 45.362]
VectInt=floor(Vect)
noise=rand(size(Vect))
NoisyVect=VectInt+noise

答案 3 :(得分:1)

<强>代码

%// Input
Vect = [15.123, 21.345, 35.567, 45.362]

%// Extract the decimal parts from the vector elements
decimal_part = Vect - floor(Vect)

%// Add gaussian noise to it with zero mean and 0.01 variance using imnoise
noisy_decimal_part = imnoise(decimal_part, 'gaussian',0,0.01)

%// Put the noisy part back to Vect to get the desired output
noisy_Vect =  noisy_decimal_part + floor(Vect)

代码运行时的输出

Vect =
   15.1230   21.3450   35.5670   45.3620
decimal_part =
    0.1230    0.3450    0.5670    0.3620
noisy_decimal_part =
    0.2254    0.3554    0.4914    0.2918
noisy_Vect =
   15.2254   21.3554   35.4914   45.2918