參考文章:
https://blog.csdn.net/zhoufan900428/article/details/37695357
常見噪聲:高斯噪聲,椒鹽噪聲,泊松噪聲,乘性噪聲
高斯噪聲
概率密度函數(shù)服從高斯分布的噪聲。
產(chǎn)生原因:
1)圖像傳感器在拍攝時市場不夠明亮、亮度不夠均勻;
2)電路各元器件自身噪聲和相互影響;
3)圖像傳感器長期工作,溫度過高
泊松噪聲
泊松噪聲,就是符合泊松分布的噪聲模型,泊松分布適合于描述單位時間內(nèi)隨機事件發(fā)生的次數(shù)的概率分布。如某一服務(wù)設(shè)施在一定時間內(nèi)受到的服務(wù)請求的次數(shù),電話交換機接到呼叫的次數(shù)、汽車站臺的候客人數(shù)、機器出現(xiàn)的故障數(shù)、自然災(zāi)害發(fā)生的次數(shù)、DNA序列的變異數(shù)、放射性原子核的衰變數(shù)等等
乘性噪聲
乘性噪聲一般由信道不理想引起,它們與信號的關(guān)系是相乘,信號在它在,信號不在他也就不在。
椒鹽噪聲
椒鹽噪聲,椒鹽噪聲又稱脈沖噪聲,它隨機改變一些像素值,是由圖像傳感器,傳輸信道,解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲。
椒鹽噪聲往往由圖像切割引起。
瑞利噪聲
瑞利噪聲相比高斯噪聲而言,其形狀向右歪斜,這對于擬合某些歪斜直方圖噪聲很有用。
瑞利噪聲的實現(xiàn)可以借由平均噪聲來實現(xiàn)。其matlab實現(xiàn)如下:
a = -0.2;
b = 0.03;
n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;
伽馬噪聲
伽馬噪聲的分布,服從了伽馬曲線的分布。伽馬噪聲的實現(xiàn),需要使用b個服從指數(shù)分布的噪聲疊加而來。指數(shù)分布的噪聲,可以使用均勻分布來實現(xiàn)。(b=1時為指數(shù)噪聲,b>1時通過若干個指數(shù)噪聲疊加,得到伽馬噪聲)
a = 25;
b = 3;
n_Erlang = zeros(M,N);
for j=1:b
n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N));
end
均勻噪聲
使用python的skimage.util.random_noise(image, mode=‘gaussian’, seed=None, clip=True, **kwargs)來添加噪聲
1.先安裝必要的依賴庫:
numpy , scipy , matpoltlib
2.安裝scikit-image
pip install scikit-image
3.導(dǎo)入util庫
import skimage
from skimage import util
4.函數(shù)介紹
def
random_noise
(
image
,
mode
=
'gaussian'
,
seed
=
None
,
clip
=
True
,
**
kwargs
)
:
功能:為浮點型圖片添加各種隨機噪聲
參數(shù):
image:輸入圖片(將會被轉(zhuǎn)換成浮點型),ndarray型
mode: 可選擇,
str
型,表示要添加的噪聲類型
gaussian:高斯噪聲
localvar:高斯分布的加性噪聲,在“圖像”的每個點處具有指定的局部方差。
poisson:泊松再生
salt:鹽噪聲,隨機將像素值變成
1
pepper:椒噪聲,隨機將像素值變成
0
或
-
1
,取決于矩陣的值是否帶符號
s
&
p:椒鹽噪聲
speckle:均勻噪聲(均值mean方差variance),out
=
image
+
n
*
image
seed: 可選的,
int
型,如果選擇的話,在生成噪聲前會先設(shè)置隨機種子以避免偽隨機
clip: 可選的,
bool
型,如果是
True
,在添加均值,泊松以及高斯噪聲后,會將圖片的數(shù)據(jù)裁剪到合適范圍內(nèi)。如果誰
False
,則輸出矩陣的值可能會超出
[
-
1
,
1
]
mean: 可選的,
float
型,高斯噪聲和均值噪聲中的mean參數(shù),默認值
=
0
var: 可選的,
float
型,高斯噪聲和均值噪聲中的方差,默認值
=
0.01
(注:不是標準差)
local_vars:可選的,ndarry型,用于定義每個像素點的局部方差,在localvar中使用
amount: 可選的,
float
型,是椒鹽噪聲所占比例,默認值
=
0.05
salt_vs_pepper:可選的,
float
型,椒鹽噪聲中椒鹽比例,值越大表示鹽噪聲越多,默認值
=
0.5
,即椒鹽等量
-
-
-
-
-
-
-
-
返回值:ndarry型,且值在
[
0
,
1
]
或者
[
-
1
,
1
]
之間,取決于是否是有符號數(shù)
-
-
-
-
-
-
-
注意:略(見源碼)
python中的**kwargs是什么?
https://www.jianshu.com/p/037b6ea516f1這個講的也很標準(關(guān)于位置參數(shù),默認參數(shù),非鍵值可變參數(shù),鍵值可變參數(shù))
*args
和
**kwargs
稱為“可變參數(shù)”,主要用與與函數(shù)定義,它們表示你可以將多個參數(shù)傳遞給這個函數(shù)。
這個“多個”的含義是,預(yù)先不知道會傳遞多少個(由于有些函數(shù)的mode參數(shù)不用,后邊跟的參數(shù)數(shù)量也隨之不同),上邊的添加噪聲函數(shù)就是個很好例子,有的噪聲不需要均值方差,有的需要。
*args
是用來發(fā)一個非鍵值對的可變數(shù)量的參數(shù)列表給一個函數(shù),例如
def
test_var_args
(
f_arg
,
*
argv
)
:
print
(
"first normal arg:"
,
f_arg
)
for
arg
in
argv
:
print
(
"another arg through *argv:"
,
arg
)
test_var_args
(
'yasoob'
,
'python'
,
'eggs'
,
'test'
)
輸出如下
first normal arg
:
yasoob
another arg through
*
argv
:
python
another arg through
*
argv
:
eggs
another arg through
*
argv
:
test
這說明后邊的多個參數(shù)會被放進一個名為argv的列表中,而函數(shù)內(nèi)部通過這個列表使用這些參數(shù)
**kwargs
允許將一個不定長度的鍵值對,作為參數(shù)傳遞給函數(shù),如果需要在一個函數(shù)中處理帶名字的參數(shù),就需要用到kwargs(意思就是kwarg代表很多有名字的參數(shù)),例如
def
test_args_kwargs
(
arg1
,
arg2
,
arg3
)
:
print
(
"arg1:"
,
arg1
)
print
(
"arg2:"
,
arg2
)
print
(
"arg3:"
,
arg3
)
分別使用*args和**kwargs來給函數(shù)傳遞參數(shù)
>>
>
args
=
(
"two"
,
3
,
5
)
>>
>
test_args_kwargs
(
*
args
)
arg1
:
two
arg2
:
3
arg3
:
5
>>
>
kwargs
=
{
"arg3"
:
3
,
"arg2"
:
"two"
,
"arg1"
:
5
}
>>
>
test_args_kwargs
(
**
kwargs
)
arg1
:
5
arg2
:
two
arg3
:
3
注意到,kwargs傳遞必須是鍵值對傳遞,而args只需要順序傳遞進去即可
一個批量添加噪聲的python代碼
import
cv2
import
os
import
numpy
as
np
from
PIL
import
Image
from
skimage
import
util
#批處理
path
=
'F:/0.MaskRCNN(3 times)/hook_data/Mask/test3'
#圖片文件夾路徑
image_names
=
os
.
listdir
(
path
)
#列舉path下所有文件和文件夾名稱(返回一個list)
save_dir
=
os
.
path
.
join
(
path
,
'speckle(0,0.1)_test03'
)
#我的文件夾名稱
os
.
mkdir
(
save_dir
)
for
image_name
in
image_names
:
if
(
image_name
.
endswith
(
'.jpg'
)
)
:
img
=
Image
.
open
(
os
.
path
.
join
(
path
,
image_name
)
)
img
=
np
.
array
(
img
)
noise_gs_img
=
util
.
random_noise
(
img
,
mode
=
'speckle'
)
noise_gs_img
=
noise_gs_img
*
255
#由于輸出是[0,1]的浮點型,先轉(zhuǎn)成灰度圖(我的輸入就是灰度圖)
noise_gs_img
=
noise_gs_img
.
astype
(
np
.
int
)
#再變成整型數(shù)組
cv2
.
imwrite
(
os
.
path
.
join
(
save_dir
,
image_name
)
,
noise_gs_img
)
#保存到新建的文件夾
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
