1. 程式人生 > >數學之路-python計算實戰(7)-機器視覺-影象產生加性零均值高斯噪聲

數學之路-python計算實戰(7)-機器視覺-影象產生加性零均值高斯噪聲

影象產生加性零均值高斯噪聲,在灰度圖上加上噪聲,加上噪聲的方式是每個點的灰度值加上一個噪聲值,噪聲值的產生方式為Box-Muller演算法生成高斯噪聲。

在計算機模擬中,經常需要生成正態分佈的數值。最基本的一個方法是使用標準的正態累積分佈函式的反函式。除此之外還有其他更加高效的方法,Box-Muller變換就是其中之一。另一個更加快捷的方法是ziggurat演算法。下面將介紹這兩種方法。一個簡單可行的並且容易程式設計的方法是:求12個在(0,1)上均勻分佈的和,然後減6(12的一半)。這種方法可以用在很多應用中。這12個數的和是Irwin-Hall分佈;選擇一個方差12。這個隨即推導的結果限制在(-6,6)之間,並且密度為12,是用11次多項式估計正態分佈。

Box-Muller方法是以兩組獨立的隨機數U和V,這兩組數在(0,1]上均勻分佈,用U和V生成兩組獨立的標準常態分佈隨機變數X和Y:

X = \sqrt{- 2 \ln U} \, \cos(2 \pi V) ,
Y = \sqrt{- 2 \ln U} \, \sin(2 \pi V)

這個方程的提出是因為二自由度的卡方分佈很容易由指數隨機變數(方程中的lnU)生成。因而通過隨機變數V可以選擇一個均勻環繞圓圈的角度,用指數分佈選擇半徑然後變換成(正態分佈的)x,y座標。


Box-Muller 是產生隨機數的一種方法。Box-Muller 演算法隱含的原理非常深奧,但結果卻是相當簡單。它一般是要得到服從正態分佈的隨機數,基本思想是先得到服從均勻分佈的隨機數再將服從均勻分佈的隨機數轉變為服從正態分佈。

# -*- coding: utf-8 -*- 
#加性零均值高斯噪聲
#code:
[email protected]
import cv2 import numpy as np fn="test2.jpg" myimg=cv2.imread(fn) img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) param=30 #灰階範圍 grayscale=256 w=img.shape[1] h=img.shape[0] newimg=np.zeros((h,w),np.uint8) for x in xrange(0,h): for y in xrange(0,w,2): r1=np.random.random_sample() r2=np.random.random_sample() z1=param*np.cos(2*np.pi*r2)*np.sqrt((-2)*np.log(r1)) z2=param*np.sin(2*np.pi*r2)*np.sqrt((-2)*np.log(r1)) fxy=int(img[x,y]+z1) fxy1=int(img[x,y+1]+z2) #f(x,y) if fxy<0: fxy_val=0 elif fxy>grayscale-1: fxy_val=grayscale-1 else: fxy_val=fxy #f(x,y+1) if fxy1<0: fxy1_val=0 elif fxy1>grayscale-1: fxy1_val=grayscale-1 else: fxy1_val=fxy1 newimg[x,y]=fxy_val newimg[x,y+1]=fxy1_val cv2.imshow('preview',newimg) cv2.waitKey() cv2.destroyAllWindows()


本部落格所有內容是原創,如果轉載請註明來源

下面部分程式碼為彩色影象的高斯噪聲產生  
# -*- coding: utf-8 -*- 
#加性零均值高斯噪聲
#code:[email protected]
import cv2
import numpy as np

fn="test2.jpg"
myimg=cv2.imread(fn)
img=myimg

param=30
#灰階範圍
grayscale=256
w=img.shape[1]
h=img.shape[0]
newimg=np.zeros((h,w,3),np.uint8)

for x in xrange(0,h):
    for y in xrange(0,w,2):
        r1=np.random.random_sample()
        r2=np.random.random_sample()
        z1=param*np.cos(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))
        z2=param*np.sin(2*np.pi*r2)*np.sqrt((-2)*np.log(r1))    
.........
.........
        newimg[x,y,0]=fxy_val_0
        newimg[x,y,1]=fxy_val_1
        newimg[x,y,2]=fxy_val_2
        newimg[x,y+1,0]=fxy1_val_0
        newimg[x,y+1,1]=fxy1_val_1
        newimg[x,y+1,2]=fxy1_val_2

cv2.imshow('preview',newimg)
cv2.waitKey()
cv2.destroyAllWindows()



相關推薦

數學-python計算實戰(7)-機器視覺-影象產生均值噪聲

影象產生加性零均值高斯噪聲,在灰度圖上加上噪聲,加上噪聲的方式是每個點的灰度值加上一個噪聲值,噪聲值的產生方式為Box-Muller演算法生成高斯噪聲。在計算機模擬中,經常需要生成正態分佈的數值。最基本的一個方法是使用標準的正態累積分佈函式的反函式。除此之外還有其他更加高效的

數學-python計算實戰(15)-機器視覺-濾波去噪(歸一化塊濾波)

# -*- coding: utf-8 -*- #code:[email protected] #歸一化塊濾波 import cv2 import numpy as np fn="tes

數學-python計算實戰(4)-Lempel-Ziv壓縮(2)

per tex alink header 一次 borde tar 文本文 寫入文件 Format characters have the following meaning; the conversion between C and Python values shou

數學-python計算實戰(1)-ubuntu安裝pypy

sudo 安裝過程 zip ima cut popu -o ack sin Get the source code. The following packages contain the source at the same revision as the above b

數學-python計算實戰(5)-初識numpy以及pypy下執行numpy

NNumPy系統是Python的一種開源的數字擴充套件。這種工具可用來儲存和處理大型矩陣,比Python自身的巢狀列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。據說NumPy將Python相當於變成一種免費的更強

機器學習: python k近鄰分類器 鳶尾花分類預測

ber AD uda classes them cal col rds esc 使用python語言 學習k近鄰分類器的api 歡迎來到我的git查看源代碼: https://github.com/linyi0604/kaggle 1 from sklearn

機器學習: python 決策樹分類 預測泰坦尼克號乘客是否幸存

現象 info n) 指標 ssi 直觀 learn 保持 afr 使用python3 學習了決策樹分類器的api 涉及到 特征的提取,數據類型保留,分類類型抽取出來新的類型 需要網上下載數據集,我把他們下載到了本地, 可以到我的git下載代碼和數據集: https

機器學習: python 線性回歸LinearRegression, 隨機參數回歸SGDRegressor 預測波士頓房價

誤差 差異 ces color square 均方誤差 rep score 處理 python3學習使用api 線性回歸,和 隨機參數回歸 git: https://github.com/linyi0604/MachineLearning 1 from skle

機器學習和python學習史上吐血整理機器學習python大資料技術書從入門到進階最全本(書籍推薦珍藏版)

“機器學習/深度學習並不需要很多數學基礎!”也許你在不同的地方聽過不少類似這樣的說法。對於鼓勵數學基礎不好的同學入坑機器學習來說,這句話是挺不錯的。不過,機器學習理論是與統計學、概率論、電腦科學、演算法等方面交叉的領域,對這些技術有一個全面的數學理解對理解演算法的內部工作機

OpenCV實踐——Python的安裝和使用

imread ipp 多少 變量 target 好的 文件 記錄 span 本文由@星沈閣冰不語出品,轉載請註明作者和出處。 文章鏈接:http://blog.csdn.net/xingchenbingbuyu/article/details/

Python大神 - Python基礎語法1

介紹 pan python基礎 發展 soft windows python介紹 ffffff 輸入 本章內容 Python介紹 發展史 Python 2 or 3? windows安裝Python Hello World程序 變量 用戶輸入 數據類型 數據運算符 作業

Python學習 -- Python基礎叠代器及for循環工作原理》

pre 循環 next 是我 我們 png 捕獲 模擬 檢查   提到叠代器不得不說叠代器協議,叠代器協議是指:對象必須提供一個__next__()方法,執行該方法要麽返回叠代中的下一項,要麽就拋出一個StopIteration異常(相當於報錯的意思)以終止叠代。然而遵循這

Python學習 -- Python基礎裝飾器》

接收 學習之路 代碼 內部 AS OS 如果 col PE   裝飾器,本質上是一個函數,更加直觀的說,裝飾器就是等於 高階函數 + 函數嵌套 + 閉包 ,裝飾器是具有某個基礎功能的函數,這種功能可以加成到其他函數上,使得其他函數的功能更加強大。除此以外,裝飾器還有兩個重要

Python學習 -- Python基礎切片》

nas col 結束 了解 默認值 對象 學習 好的 tuple   切片從字面上的意思也能很好的了解,就是將某個東西切成一個片段。也就是說,切片是一種對數據的操作,截取數據中的一個片段,字符串,列表和元組都支持切片。 # 語法: 操作對象[起始位置:結束位置:步長] #

Python--Python基礎9--Socket編程

主機 make 深入理解 pre odi data splay 異常 inpu 一、socket介紹   Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Sock

Python--Python基礎

圖片 數據 png red display socket 並發編程 memcached 異步 目錄:   第一篇:初識Python   第二篇:數據類型     第三篇:數據運算、控制流、文件操作   第四篇:函數   第五篇:內置函數   第六篇:模

菜鳥——Python學習串口通信(與STC89C51)源碼及打包發布試水

方式 lin enc error: pri 打開端口 端口號 兩個 關閉 想做上位機控制系統,就拿51來試試水。 Python環境:Win10+Python 3.6.4(64位)+serial,pyserial 一、上位機程序的編寫 import serial ser =

西遊——python全棧——Form組件字段及動態綁定

.html pytho rom short val 動態綁定 class form local 一、HTML中 | safe 可在後臺用以下方式處理 1 text = "<input type‘text‘ />" 2 from django.utils.sa

西遊——python全棧——瀑布流

oca url ret sel lang spa json 找到 create ############################### class Picture(models.Model): src = models.ImageField(verbo

Python學習——Python基礎運算符

學習之路 type text 技術 計算 python基礎 tex fff oss 算術運算 先and 後 or 先計算括號內 執行順序: 從前到後 結果 True OR ==> True True And ==> 繼續走 False Or