手动将 Salt n Pepper 噪声添加到图像中

信息处理 图像处理 matlab 噪音
2021-12-28 09:20:11

当我在 Matlab 中查看 Salt n Pepper 噪声算法时,我发现了这个,

case 'salt & pepper' % Salt & pepper noise
    b = a;
    x = rand(sizeA);
    d = find(x < p3/2);
    b(d) = 0; % Minimum value
    d = find(x >= p3/2 & x < p3);
    b(d) = 1; % Maximum (saturated) value

我简化为这样,

% [a, code, classIn, classChanged, p3, p4]
% p3 = density
% p4 = variance
% a = Image
% code = noise Type 
% classIn = Image Class i.e unit8 , unit16, double

% - - - - 算法 - - - - - %

%     b = a;   <-- Assign b to the input image
%     x = rand(sizeA); <--- Generate random pixels from the image pixels
%     d = find(x < p3/2); <--- Find the pixels whose values are less than half of the mean value  
%     b(d) = 0 <-- Implement minimum noise to them
%     d = find(x >= p3/2 & x < p3) <--- Find the pixels whose values are
%                                        greater than half of the mean
%                                        value & less than mean value
%     b(d) = 1;     <-- Implement maximum noise to them

我没有使用 imnoise,而是尝试使用上述算法将 Salt n Pepper 噪声手动添加到图像中,

I = imread('2.jpg');
J = rgb2gray(I);
p3=0.05 %default
b = J;
x = rand(size(b));
d = find(x < p3/2);
b(d) = 0; % Minimum value
d = find(x >= p3/2 & x < p3);
b(d) = 1; % Maximum (saturated) value

我不知道最终图像的存储位置,因为当我使用 imshow for b 时,它显示了一个没有椒盐噪声的简单图像。最终图像存储在哪里?我怎么能看到它?

PS:图像类是什么意思?那是unit8,unit16?

1个回答

最终图像似乎在变量“b”中。观察最大值(盐)和最小值(胡椒)值分别为 1 和 0。这表明您的原始图像需要是灰度级归一化为 [0,1] 的强度图像。这可能是当您将“b”显示为图像时看不到合理结果的原因。

如果您的图像是灰度 {0,...,255} 即 8 位无符号整数格式 (unit8),您可以更改代码以分配 0 和 255 而不是 0 和 1。

我建议您在此处阅读有关各种图像存储类型的文档:http: //www.mathworks.com/help/toolbox/images/f14-13543.html

有时它会变得相当混乱,主要是因为有很多名称(强度图像、灰度图像、RGB、HSV、二值图像、索引图像等)