最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用python給數(shù)據(jù)加上高斯噪聲

 更新時間:2023年05月06日 10:20:38   作者:迪普達克范特西  
這篇文章主要介紹了如何用python給數(shù)據(jù)加上高斯噪聲問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python給數(shù)據(jù)加上高斯噪聲

一開始用MATLAB給數(shù)據(jù)加噪聲很簡單,就一句話:

% 給數(shù)據(jù)加指定SNR的高斯噪聲
signal_noise = awgn(signal,SNR,'measured');

但用python實現(xiàn)加噪聲的時候遇到一個小問題,也是由于本人愚鈍的原因吧。

回顧MATLAB中的加高斯噪聲

常用方法:

% 給數(shù)據(jù)加指定SNR的高斯噪聲
signal_noise = awgn(signal,SNR,'measured');
Ps=sum(sum((signal-mean(mean(signal))).^2)); ? ? ?? ? %signal power
Pn=sum(sum((signal-signal_noise).^2)); ? ? ? ? ? ??? ?%noise power
snr=10*log10(Ps/Pn);?? ??? ??? ??? ??? ??? ??? ??? ?%驗證所加的噪聲

這里的signal 是一個二維的數(shù)據(jù)矩陣,所以后面的操作都是矩陣的操作。MATLAB中運行完全沒有問題。

Python中利用numpy給數(shù)據(jù)加噪聲

本文方法:

# 給數(shù)據(jù)加指定SNR的高斯噪聲
SNR = 5
noise = np.random.randn(signal.shape[0],signal.shape[1]) ?? ?#產(chǎn)生N(0,1)噪聲數(shù)據(jù)
noise = noise-np.mean(noise) ?? ??? ??? ??? ??? ??? ??? ??? ?#均值為0
signal_power = np.linalg.norm( signal - signal.mean() )**2 / signal.size?? ?#此處是信號的std**2
noise_variance = signal_power/np.power(10,(SNR/10)) ? ? ? ? #此處是噪聲的std**2
noise = (np.sqrt(noise_variance) / np.std(noise) )*noise ? ?##此處是噪聲的std**2
signal_noise = noise + signal
Ps = ( np.linalg.norm(signal - signal.mean()) )**2 ? ? ? ? ?#signal power
Pn = ( np.linalg.norm(signal - signal_noise ) )**2 ? ? ? ? ?#noise power
snr = 10*np.log10(Ps/Pn)

有很多人在產(chǎn)生給定SNR的高斯噪聲時,用的是:

signal_power = np.linalg.norm( signal )**2
noise_variance = signal_power/np.power(10,(SNR/10))
noise = np.sqrt(noise_variance)*noise + 0

這里實際上是有問題的,我一開始也沒發(fā)現(xiàn)。因為產(chǎn)生分布為N(mean,std**2)的噪聲我們用的公式是:

noise = std * N(0,1) + mean

換句話說,我們需要計算噪聲的std 以及 mean 。

計算噪聲的 std 時,需要先計算信號的 std,然后利用SNR來求出噪聲的 std ,從上面的代碼中能發(fā)現(xiàn),signal_power 代表的是信號的std^2 與 signal.size 的乘積,多乘了一個signal.size 那結(jié)果肯定是有問題的。

python批量給圖形添加噪聲

python代碼實現(xiàn)批量給圖形添加高斯噪聲和椒鹽噪聲

高斯噪聲

import cv2
import os
import numpy as np
def add_noise_Guass(img, mean=0, var=0.01): ?# 添加高斯噪聲
? ? img = np.array(img / 255, dtype=float)
? ? noise = np.random.normal(mean, var ** 0.5, img.shape)
? ? out_img = img + noise
? ? if out_img.min() < 0:
? ? ? ? low_clip = -1
? ? else:
? ? ? ? low_clip = 0
? ? ? ? out_img = np.clip(out_img, low_clip, 1.0)
? ? ? ? out_img = np.uint8(out_img * 255)
? ? return out_img
# 讀取函數(shù),用來讀取文件夾中的所有函數(shù),輸入?yún)?shù)是文件名
def read_directory(directory_name):
? ? for filename in os.listdir(directory_name):
? ? ? ? print(filename) ?# 僅僅是為了測試
? ? ? ? img = cv2.imread(directory_name + "/" + filename)
? ? ? ? #####顯示圖片#######
? ? ? ? out_img = add_noise_Guass(img)
? ? ? ? cv2.imshow("img", out_img)
? ? ? ? cv2.waitKey(0)
? ? ? ? #####################
? ? ? ? #####保存圖片#########
? ? ? ? cv2.imwrite("C:/Users/Dong.Shao2/Desktop/DataSet/gaussian" + "/" + filename, out_img * 255)
read_directory("C:/Users/Dong.Shao2/Desktop/DataSet/image")#這里傳入所要讀取文件夾的絕對路徑,加引號(引號不能省略?。?/pre>

椒鹽噪聲

import cv2
import random
import os
import numpy as np
def add_salt_pepper(img, prob):
? ? resultImg = np.zeros(img.shape, np.uint8)
? ? thres = 1 - prob
? ? for i in range(img.shape[0]):
? ? ? ? for j in range(img.shape[1]):
? ? ? ? ? ? rdn = random.random()
? ? ? ? ? ? if rdn < prob:
? ? ? ? ? ? ? ? resultImg[i][j] = 0
? ? ? ? ? ? elif rdn > thres:
? ? ? ? ? ? ? ? resultImg[i][j] = 255
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? resultImg[i][j] = img[i][j]
? ? return resultImg
# 讀取函數(shù),用來讀取文件夾中的所有函數(shù),輸入?yún)?shù)是文件名
def read_directory(directory_name):
? ? for filename in os.listdir(directory_name):
? ? ? ? print(filename) ?# 僅僅是為了測試
? ? ? ? img = cv2.imread(directory_name + "/" + filename)
? ? ? ? #####顯示圖片#######
? ? ? ? out_img = add_salt_pepper(img,0.05)
? ? ? ? cv2.imshow("img", out_img)
? ? ? ? cv2.waitKey(0)
? ? ? ? #####################
? ? ? ? #####保存圖片#########
? ? ? ? cv2.imwrite("C:/Users/Dong.Shao2/Desktop/DataSet/salt_pepper" + "/" + filename, out_img )
read_directory("C:/Users/Dong.Shao2/Desktop/DataSet/image")#這里傳入所要讀取文件夾的絕對路徑,加引號(引號不能省略?。?/pre>

隨機噪聲

import cv2
import os
import numpy as np
def random_noise(image,noise_num):
? ? '''
? ? 添加隨機噪點(實際上就是隨機在圖像上將像素點的灰度值變?yōu)?55即白色)
? ? param image: 需要加噪的圖片
? ? param noise_num: 添加的噪音點數(shù)目
? ? return: img_noise
? ? '''
? ? # 參數(shù)image:,noise_num:
? ? img_noise = image
? ? # cv2.imshow("src", img)
? ? rows, cols, chn = img_noise.shape
? ? # 加噪聲
? ? for i in range(noise_num):
? ? ? ? x = np.random.randint(0, rows)#隨機生成指定范圍的整數(shù)
? ? ? ? y = np.random.randint(0, cols)
? ? ? ? img_noise[x, y, :] = 255
? ? return img_noise
# 讀取函數(shù),用來讀取文件夾中的所有函數(shù),輸入?yún)?shù)是文件名
def read_directory(directory_name):
? ? for filename in os.listdir(directory_name):
? ? ? ? print(filename) ?# 僅僅是為了測試
? ? ? ? img = cv2.imread(directory_name + "/" + filename)
? ? ? ? #####顯示圖片#######
? ? ? ? out_img = random_noise(img,10000)
? ? ? ? cv2.imshow("img", out_img)
? ? ? ? cv2.waitKey(0)
? ? ? ? #####################
? ? ? ? #####保存圖片#########
? ? ? ? cv2.imwrite("C:/Users/Dong.Shao2/Desktop/DataSet/random" ?+ "/" + filename, out_img )
read_directory("C:/Users/Dong.Shao2/Desktop/DataSet/image")#這里傳入所要讀取文件夾的絕對路徑,加引號(引號不能省略!)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pycharm導(dǎo)入源碼的具體步驟

    pycharm導(dǎo)入源碼的具體步驟

    在本篇內(nèi)容里小編給大家整理了關(guān)于pycharm導(dǎo)入源碼的具體步驟,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • Matlab中如何實現(xiàn)將長字符串換行寫

    Matlab中如何實現(xiàn)將長字符串換行寫

    這篇文章主要介紹了Matlab中如何實現(xiàn)將長字符串換行寫問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python?面向切面編程?AOP?及裝飾器

    Python?面向切面編程?AOP?及裝飾器

    這篇文章主要介紹了Python?面向切面編程?AOP?及裝飾器,AOP,就是面向切面編程,簡單的說,就是動態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程,更多相關(guān)資需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • PyTorch 解決Dataset和Dataloader遇到的問題

    PyTorch 解決Dataset和Dataloader遇到的問題

    今天小編就為大家分享一篇PyTorch 解決Dataset和Dataloader遇到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Pycharm不同版本鏡像源添加方法

    Pycharm不同版本鏡像源添加方法

    本文主要介紹了Pycharm不同版本鏡像源添加方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 使用python實現(xiàn)定時報天氣的示例代碼

    使用python實現(xiàn)定時報天氣的示例代碼

    本文主要介紹了使用python實現(xiàn)定時報天氣,只需要讓爬蟲程序每天自動為你發(fā)送,下面就詳細的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • Python找出9個連續(xù)的空閑端口

    Python找出9個連續(xù)的空閑端口

    這篇文章主要介紹了Python找出9個連續(xù)的空閑端口的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python中如何添加自定義模塊

    Python中如何添加自定義模塊

    在本篇文章里小編給大家分享了關(guān)于Python中添加自定義模塊的實例方法,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 在windows下使用python進行串口通訊的方法

    在windows下使用python進行串口通訊的方法

    今天小編就為大家分享一篇在windows下使用python進行串口通訊的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用PyCharm官方中文語言包漢化PyCharm

    使用PyCharm官方中文語言包漢化PyCharm

    這篇文章主要介紹了使用PyCharm官方中文語言包漢化PyCharm,需要的朋友可以參考下
    2020-11-11

最新評論

唐海县| 塔河县| 茂名市| 齐齐哈尔市| 五常市| 安阳市| 福贡县| 佛教| 沅陵县| 疏勒县| 五台县| 武川县| 鄱阳县| 鹤山市| 内江市| 邹城市| 崇阳县| 天峻县| 铜川市| 边坝县| 武宣县| 类乌齐县| 湾仔区| 文化| 雷山县| 宜州市| 新余市| 涞源县| 普兰县| 塔城市| 铜梁县| 临西县| 永平县| 桓台县| 文登市| 云龙县| 江阴市| 凤翔县| 巴彦县| 荥阳市| 鸡泽县|