亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

幾種常見的數(shù)字圖像噪聲,及使用python添加噪聲

系統(tǒng) 2867 0

參考文章:
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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美又黄又嫩大片a级 | 97久久人人爽人人爽人人 | 亚洲六月丁香色婷婷综合久久 | 两性视频久久 | 国产成人午夜性a一级毛片 国产成人午夜性视频影院 国产成人系列 | 久久久久久久久国产 | 69精品| 久操视频在线观看 | 热久久国产 | 成人在线免费网站 | 夜夜夜爽爽爽久久久 | 中国大陆高清aⅴ毛片 | 欧美精品久久久久久久小说 | 精品欧美一区二区三区精品久久 | 极品粉嫩粉嫩福利视频在线 | xxxx免费国产在线视频 | 欧美成人一区二区三区 | 久久久受www免费人成 | 亚洲欧美日韩综合一区久久 | 久久综合精品视频 | 日日日日干 | 日本老熟妇激情毛片 | 欧美一级视频在线观看欧美 | 深夜福利视频在线一区 | 国产精品久久久久久久久久久搜索 | 99爱视频免费高清在线观看 | 色爱区综合激情五月综合色 | 久久不卡影院 | 摸逼综合网 | 日日噜噜夜夜狠狠tv视频免费 | 久久亚洲国产精品五月天婷 | 欧美特级爽毛片 | 天天爽夜夜爽精品视频一 | 91国视频在线观看 | 色婷婷激婷婷深爱五月小蛇 | 国产精品天天影视久久综合网 | 欧美毛片日韩一级在线 | 国产精品久久99 | 91色爱| 精品香蕉99久久久久网站 | 在线看片91|