我有一些图像,我需要添加增量的泊松噪声,以便更彻底地分析它们。我知道你可以在MATLAB中做到这一点,但你如何在Python中做到这一点?到目前为止,搜索没有任何结果。
答案 0 :(得分:10)
Helder的答案是正确的。我只想补充泊松噪声不是加性的事实,你不能把它作为高斯噪声添加。
取决于你想要达到的目标,这里有一些建议:
模拟低光噪声图像(如果PEAK = 1,则会非常嘈杂)
$(document).ready(function(){
$("#li1").click(function(){
$(".dd1").slideToggle("fast");
$('.dd2').slideUp();
});
$("#li2").click(function(){
$(".dd2").slideToggle("fast");
$('.dd1').slideUp();
});
$('.bgOverlay').click(function () {
$('.dd1').slideUp();
$('.dd2').slideUp();
$('ul').slideUp();
});
});
$(document).ready(function(){
$("#nav-toggle").click(function(){
$("ul").slideToggle(1);
$('.dd1').slideUp();
$('.dd2').slideUp();
});
});
在干净的图像上添加噪点图层
.navbar {
position: fixed;
height: 3em;
width: 100%;
background-color: rgba(0,0,0,0.5);
z-index: 1;
}
.navbar ul {
position: relative;
display: none;
top: 100%;
right:-20%;
height: 0;
list-style: none;
font-size: 160%;
}
.navbar ul li {
position: relative;
width: 60%;
background-color: rgba(0,0,0,0.5);
border-top: none;
text-indent: 10px;
color: gray;
border-bottom: 1px solid rgba(254,254,254,0.1);
}
.navbar ul li:hover {
background-color: rgba(0,0,0,0.6);
}
.navbar ul li a{
text-decoration: none;
color: rgba(254,254,254,1);
font-weight: 100;
}
.navbar ul ul ul, .navbar ul ul ul li {
display: none;
}
.navbar ul ul, .navbar ul ul li {
position: relative;
font-size: 100%;
background-color: rgba(0,0,0,0);
}
li:last-child {
border-radius: 0px 0px 10px 10px;
}
li:first-child {
border-top: 1px solid rgba(254,254,254,0.3);
}
.dd1 {
display: none;
position: relative;
width: 100%;
height: 100%;
z-index: 1;
}
.dd1 li {
font-size: 100%;
background-color: rgba(0,0,0,0)
}
.dd2 {
display: none;
position: relative;
width: 100%;
height: 20%;
background-color: rgba(0,0,0,0.5);
z-index: 1;
}
#nav-toggle {
position: absolute;
right: 10px;
top: 25%;
}
#nav-toggle {
cursor: pointer;
padding: 10px 35px 16px 0px;
z-index: 5;
}
#nav-toggle span, #nav-toggle span:before, #nav-toggle span:after {
cursor: pointer;
border-radius: 1px;
height: 3px;
width: 35px;
background: rgba(254,254,254,0.9);
position: absolute;
display: block;
content: '';
opacity: 0.9;
}
#nav-toggle span:before {
top: -10px;
}
#nav-toggle span:after {
bottom: -10px;
}
#nav-toggle span, #nav-toggle span:before, #nav-toggle span:after {
transition: all 500ms ease-in-out;
}
然后你可以将结果裁剪为0 - 255(如果你喜欢的话)(我使用PIL,所以我使用255而不是1)。
答案 1 :(得分:7)
实际上保罗的答案没有意义。
泊松噪声取决于信号!并且使用他提供的那些命令,后来添加到图像中的噪声与信号无关。
为了使信号依赖,你将图像传递给NumPy的泊松函数:
classmethod
答案 2 :(得分:2)
您可以使用skimage.util.random_noise
:
<mat-form-field>
<mat-label>Value</mat-label>
<input
type="text"
localizedNumericInput
matInput
autocomplete="off"
formControlName="value"
/>
</mat-form-field>
答案 3 :(得分:-1)
此Chapter 1的book的项目 1.4.4-“泊松分布的高斯近似” :
对于较大的平均值,泊松分布很好地由高斯分布近似,其均值和方差等于泊松随机变量的平均值:
P(μ)≈N(μ,μ)
然后,我们可以从正态分布N(0,1)生成泊松噪声,按μ的平方根缩放其标准偏差,并将其添加到图像中,即μ值:
# Image size
M, N = 1000, 1000
# Generate synthetic image
image = np.tile(np.arange(0,N,dtype='float64'),(M,1)) * 20
# -- sqrt(mu) * normal(0,1) --
poisson_noise = np.sqrt(image) * np.random.normal(0, 1, image.shape)
# Add the noise to the mu values
noisy_image = image + poisson_noise
plt.figure(figsize=(10,10))
plt.subplot(2,2,1)
plt.title('Image')
plt.imshow(image,'gray')
plt.subplot(2,2,2)
plt.title('Noisy image noise')
plt.imshow(noisy_image,'gray')
plt.subplot(2,2,3)
plt.title('Image profile')
plt.plot(image[0,:])
plt.subplot(2,2,4)
plt.title('Noisy image profile')
plt.plot(noisy_image[0,:])
print("Synthetic image mean: {}".format(image[:,1].mean()))
print("Synthetic image variance: {}".format(image[:,1].var()))
print("Noisy image mean: {}".format(noisy_image[:,1].mean()))
print("Noisy image variance: {}".format(noisy_image[:,1].var()))
由于泊松噪声是信号相关的,所以随着我们增加基础信号,噪声方差也会增加,如我们在以下行配置文件中看到的:
单列统计信息输出:
合成图像平均值:20.0
合成图像方差:0.0
噪点图像平均值:19.931120555821597
噪声图像差异:19.39456713877459
答案 4 :(得分:-4)
如果您可以使用numpy / scipy,则以下内容应该有所帮助。我建议您将数组转换为float以进行中间计算,然后将其转换回uint8以进行输出/显示。由于泊松噪声都是> = 0,因此在转换为uint8时,需要决定如何处理数组的溢出。您可以缩放或截断,具体取决于您的目标。
filename = 'myimage.png'
imagea = (scipy.misc.imread(filename)).astype(float)
poissonNoise = numpy.random.poisson(imagea).astype(float)
noisyImage = imagea + poissonNoise
#here care must be taken to re cast the result to uint8 if needed or scale to 0-1 etc...