显示高斯噪声
Showing Gaussian noise
im = imread('peppers.png');
noise=randn(size(im)).*1;
output=double(im)+noise;
imshow(output);
它只是显示一个白色图像
我希望它在 peppers.png
之上显示一些高斯噪声
您应该首先使用 im2double
(而不是 double
)转换为双精度,然后添加噪声:
im = imread('peppers.png');
imd = im2double(im);
noise=randn(size(im)).*0.1;
output=imd+noise;
imshow(output);
为什么会这样?
如果您检查 im
变量的类型,您会看到它是 uint8
。将函数 double
应用于类型为 uint8
的矩阵不会重新缩放值,只会更改函数的类型。
>> im(100,100)
ans =
66
>> double(im(100,100))
ans =
66
并检查类型:
>> class(im)
ans =
uint8
>> class(double(im))
ans =
double
另一方面,当我们使用 im2double
时,矩阵被重新缩放(至 [0 1]
)并且 class 也更改为 double
:
>> imd(100,100)
ans =
0.2588
>> class(imd)
ans =
double
im = imread('peppers.png');
noise=randn(size(im)).*1;
output=double(im)+noise;
imshow(output);
它只是显示一个白色图像
我希望它在 peppers.png
之上显示一些高斯噪声您应该首先使用 im2double
(而不是 double
)转换为双精度,然后添加噪声:
im = imread('peppers.png');
imd = im2double(im);
noise=randn(size(im)).*0.1;
output=imd+noise;
imshow(output);
为什么会这样?
如果您检查 im
变量的类型,您会看到它是 uint8
。将函数 double
应用于类型为 uint8
的矩阵不会重新缩放值,只会更改函数的类型。
>> im(100,100)
ans =
66
>> double(im(100,100))
ans =
66
并检查类型:
>> class(im)
ans =
uint8
>> class(double(im))
ans =
double
另一方面,当我们使用 im2double
时,矩阵被重新缩放(至 [0 1]
)并且 class 也更改为 double
:
>> imd(100,100)
ans =
0.2588
>> class(imd)
ans =
double