2017-12-15 11:01:55 vitaminc4 阅读数 1161

椒盐噪声:

椒盐噪声是指两种噪声,一种是盐噪声(salt noise),另一种是胡椒噪声(pepper noise)。盐=白色,椒=黑色。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。

椒盐噪声(salt-and-pepper noise)是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起,去除脉冲干扰及椒盐噪声最常用的算法是中值滤波

2019-09-16 20:05:16 weixin_44225182 阅读数 2363

添加椒盐噪声
    椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。

方法一:利用imnoise()函数

t=imread('a1.jpg');
subplot(1,2,1),imshow(t),title('原图');
t1=imnoise(t,'salt & pepper',0.1);
subplot(1,2,2),imshow(t1),title('加入噪声密度:0.1的椒盐噪声');
t2=imnoise(t,'salt & pepper',0.2);
figure,subplot(1,2,1),imshow(t2),title('加入噪声密度:0.2的椒盐噪声');
t3=imnoise(t,'salt & pepper',0.3);
subplot(1,2,2),imshow(t3),title('加入噪声密度:0.3的椒盐噪声');

效果图:
在这里插入图片描述
在这里插入图片描述
注意:

  • 噪声类型是 ‘salt & pepper’ 一定注意空格的位置 这里比较严格
  • 当噪声类型是’salt & pepper’的时候,第三个参数的意思是噪声密度,比如0.1,那么总像素个数的10%为黑白点,当然是黑点还是白点都是随机的。

方法二:自己构造随机点

image=imread('a1.jpg');
[width,height,z]=size(image);

result2=image;
subplot(1,2,1)
imshow(image);
title('原图');

%k1、k2作为判断临界点
k1=0.2;
k2=0.2;
%rand(m,n)是随机生成m行n列的矩阵,每个矩阵元素都在0-1之间
%这里k都是0.2,所以小于k的元素在矩阵中为1,反之为0
a1=rand(width,height)<k1;
a2=rand(width,height)<k2;
%合成彩色图像
t1=result2(:,:,1);
t2=result2(:,:,2);
t3=result2(:,:,3);
%分成黑点 白点 随机
t1(a1&a2)=0;
t2(a1&a2)=0;
t3(a1&a2)=0;
t1(a1& ~a2)=255;
t2(a1& ~a2)=255;
t3(a1& ~a2)=255;
result2(:,:,1)=t1;
result2(:,:,2)=t2;
result2(:,:,3)=t3;
subplot(1,2,2)
imshow(result2);
title('加椒盐噪声后');

效果图:
在这里插入图片描述

代码说明:
1.c=rand(10,10)
在这里插入图片描述
2.a=c<0.2
凡是第一步生成的10*10矩阵中元素小于0.2的元素都变成1,其余为0(和c++的0假1真差不多),这一步就是模拟噪声密度,小于0.2相当于有20%的像素点。
在这里插入图片描述
3.b=rand(10,10)<0.2
在这里插入图片描述
4.在分别a&b a&~b
a&b:a和b队员元素都为1的时候,则结果为1,反正为0. 显示白点或者黑点
a&~b:a为1 b为0时,结果为1 显示黑点或者白点
这里都是以a为基准,只有a为1的点才可能成为黑白点,而a为1的点就是通过限制临界值获得的,其实就是imnoise中的噪声密度值。

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

2019-05-05 09:51:00 m0_37992521 阅读数 482

椒盐噪声

  1. 什么是椒盐噪声
    椒盐噪声,就是椒噪声和盐噪声的混合噪声。其中,椒噪声的椒即是黑胡椒之意,在图像中表现为黑色点斑;而盐噪声则是取自食盐,在图像中表现为白色点状。一般两种噪声在图像中混合出现,表现为黑白混杂。
  2. 如何添加椒盐噪声
    因为椒噪声表现为黑色,属于低灰度图像;盐噪声表现为白色,属于高灰度图像。利用这种特性,可以在图像中随机选取像素点赋值为0或者255,通常为了便于人眼分辨,随机赋值为255.
  3. 如何去除椒盐噪声
    椒盐噪声的像素值为0或者255,用中值滤波的方法处理效果非常好。中值滤波是在对一个区域的像素值进行大小排序,取其中值代表这一区域的像素值。因此对于消弱高低频分量对图像的影响的效果非常明显。
    opencv实现程序:https://blog.csdn.net/m0_37992521/article/details/89840367
2017-08-03 11:49:49 u010368556 阅读数 13290

 http://blog.csdn.net/qq_34784753/article/details/69379135

 

下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声。

1.椒盐噪声

       椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。图像模拟添加椒盐噪声是通过随机获取像素点并设置为高亮度点和低灰度点来实现的

2.高斯噪声

       高斯噪声是指高绿密度函数服从高斯分布的一类噪声。特别的,如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度有事均匀分布的,则称这个噪声为高斯白噪声。高斯白噪声二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯噪声包括热噪声和三里噪声。高斯噪声万有由它的事变平均值和两瞬时的协方差函数来确定,若噪声是平稳的,则平均值与时间无关,而协方差函数则变成仅和所考虑的两瞬时之差有关的相关函数,在意义上它等同于功率谱密度。高斯早生可以用大量独立的脉冲产生,从而在任何有限时间间隔内,这些脉冲中的每一个买充值与所有脉冲值得总和相比都可忽略不计。

        根据Box-Muller变换原理,建设随机变量U1、U2来自独立的处于(0,1)之间的均匀分布,则经过下面两个式子产生的随机变量Z0,Z1服从标准高斯分布。


上式中Z0,Z1满足正态分布,其中均值为0,方差为1,变量U1和U2可以修改为下式:


给图像添加两种噪声的程序如下:

#include <cstdlib>  
#include <iostream>  
#include <opencv2\core\core.hpp>  
#include <opencv2\highgui\highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  

using namespace cv;
using namespace std;

double generateGaussianNoise(double m, double sigma);
Mat addSaltNoise(const Mat srcImage, int n);
Mat addGaussianNoise(Mat &srcImag);

int main()
{
	Mat srcImage = imread("imL.png");
	if (!srcImage.data)
	{
		cout << "读入图像有误!" << endl;
		system("pause");
		return -1;
	}
	imshow("原图像", srcImage);
	Mat dstImage1 = addSaltNoise(srcImage, 3000);
	Mat dstImage2 = addGaussianNoise(srcImage);
	imshow("添加椒盐噪声的图像", dstImage1);
	imshow("添加高斯噪声的图像", dstImage2);
	//存储图像  
	imwrite("salt_pepper_Image.jpg", dstImage1);
	imwrite("GaussianNoise_Image.jpg", dstImage2);
	waitKey();
	return 0;
}

Mat addSaltNoise(const Mat srcImage, int n)
{
	Mat dstImage = srcImage.clone();
	for (int k = 0; k < n; k++)
	{
		//随机取值行列  
		int i = rand() % dstImage.rows;
		int j = rand() % dstImage.cols;
		//图像通道判定  
		if (dstImage.channels() == 1)
		{
			dstImage.at<uchar>(i, j) = 255;       //盐噪声  
		}
		else
		{
			dstImage.at<Vec3b>(i, j)[0] = 255;
			dstImage.at<Vec3b>(i, j)[1] = 255;
			dstImage.at<Vec3b>(i, j)[2] = 255;
		}
	}
	for (int k = 0; k < n; k++)
	{
		//随机取值行列  
		int i = rand() % dstImage.rows;
		int j = rand() % dstImage.cols;
		//图像通道判定  
		if (dstImage.channels() == 1)
		{
			dstImage.at<uchar>(i, j) = 0;     //椒噪声  
		}
		else
		{
			dstImage.at<Vec3b>(i, j)[0] = 0;
			dstImage.at<Vec3b>(i, j)[1] = 0;
			dstImage.at<Vec3b>(i, j)[2] = 0;
		}
	}
	return dstImage;
}
//生成高斯噪声  
double generateGaussianNoise(double mu, double sigma)
{
	//定义小值  
	const double epsilon = numeric_limits<double>::min();
	static double z0, z1;
	static bool flag = false;
	flag = !flag;
	//flag为假构造高斯随机变量X  
	if (!flag)
		return z1 * sigma + mu;
	double u1, u2;
	//构造随机变量  
	do
	{
		u1 = rand() * (1.0 / RAND_MAX);
		u2 = rand() * (1.0 / RAND_MAX);
	} while (u1 <= epsilon);
	//flag为真构造高斯随机变量  
	z0 = sqrt(-2.0*log(u1))*cos(2 * CV_PI*u2);
	z1 = sqrt(-2.0*log(u1))*sin(2 * CV_PI*u2);
	return z0*sigma + mu;
}

//为图像添加高斯噪声  
Mat addGaussianNoise(Mat &srcImag)
{
	Mat dstImage = srcImag.clone();
	int channels = dstImage.channels();
	int rowsNumber = dstImage.rows;
	int colsNumber = dstImage.cols*channels;
	//判断图像的连续性  
	if (dstImage.isContinuous())
	{
		colsNumber *= rowsNumber;
		rowsNumber = 1;
	}
	for (int i = 0; i < rowsNumber; i++)
	{
		for (int j = 0; j < colsNumber; j++)
		{
			//添加高斯噪声  
			int val = dstImage.ptr<uchar>(i)[j] +
				generateGaussianNoise(0, 2.235) * 32;
			if (val < 0)
				val = 0;
			if (val>255)
				val = 255;
			dstImage.ptr<uchar>(i)[j] = (uchar)val;
		}
	}
	return dstImage;
}


2016-02-02 11:25:07 sunmc1204953974 阅读数 14397

椒盐噪声

图像噪声之椒盐噪声(Salt And Pepper Noise)

概述:

椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单。

算法步骤:

我们使用信噪比(Signal NoiseRate)衡量图像噪声,

图象的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图象信噪比,即信号与噪声的方差之比。首先计算图象所有象素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。

如果是灰度图像的话,SNR=(洁净图片中的像素点的灰度值之和)/abs(噪声图片的灰度值之和-洁净图片中的灰度值之和)为该图像的信噪比。

给一副数字图像加上椒盐噪声的步骤如下:

  • (1)指定信噪比 SNR (其取值范围在[0, 1]之间)
  • (2)计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)
  • (3)随机获取要加噪的每个像素位置P(i, j)
  • (4)指定像素值为255或者0。
  • (5)重复3,4两个步骤完成所有像素的NP个像素
  • (6)输出加噪以后的图像

编程实例:

为简单起见,直接使用灰度图进行测试,彩色图的原理是相同的。

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

from numpy import*

#读取图片,灰度化,并转为数组
img = im = array(Image.open('./source/test.jpg').convert('L'))

#信噪比
SNR = 0.6

#计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)
noiseNum=int((1- SNR)*img.shape[0]*img.shape[1])

#于随机位置将像素值随机指定为0或者255
for i in range(noiseNum):

    randX=random.random_integers(0,img.shape[0]-1)  

    randY=random.random_integers(0,img.shape[1]-1)  

    if random.random_integers(0,1)==0:  

        img[randX,randY]=0  

    else:  

        img[randX,randY]=255   

#显示图像
gray()

imshow(img)

show()         

运行结果:

原图

这里写图片描述

SNR = 0.8

这里写图片描述

SNR = 0.6

这里写图片描述

SNR = 0.4

这里写图片描述

结语:

本篇博客主要介绍了椒盐噪声这种常见的图像噪声,希望对大家有所帮助~

没有更多推荐了,返回首页