Python光學(xué)仿真學(xué)習(xí)處理高斯光束分布圖像
通過python處理光斑圖像
1 相關(guān)包與圖像讀取
首先需要科學(xué)計(jì)算必備包numpy
和畫圖包matplotlib.pyplot
,我們通過后者進(jìn)行圖像數(shù)據(jù)的讀取.
plt.imread
讀取圖片之后為數(shù)據(jù)格式為numpy數(shù)組,可以通過成員函數(shù)astype
將整型數(shù)據(jù)變成浮點(diǎn)型,有利于后期處理。
plt.imshow
將img
的數(shù)據(jù)加載到窗口,plt.show()
顯示繪圖窗口,默認(rèn)顯示為偽彩圖。
python自動(dòng)畫出了偽彩圖,可以通過在plt.imshow
的過程中輸入cmap
參數(shù)使之得到灰度圖
>>> plt.imshow(img,cmap=plt.cm.gray) <matplotlib.image.AxesImage object at 0x000002E84F5B4788> >>> plt.show()
2 圖像截取
由于光斑只占據(jù)圖片中很小一部分,大量的冗余信息等同于噪聲,會(huì)對(duì)后期的數(shù)據(jù)處理造成影響,故需截取感興趣的區(qū)域,plt.ginput
函數(shù)提供一種交互操作方法,可返回鼠標(biāo)點(diǎn)擊的位置,其輸入?yún)?shù)為選取點(diǎn)數(shù),輸出為點(diǎn)擊的點(diǎn)的坐標(biāo)。
>>> plt.imshow(img) <matplotlib.image.AxesImage object at 0x000002E857A21448> >>> plt.ginput(2) [(717.0757575757577, 299.8290043290042), (783.5692640692644, 233.33549783549768)]
在python中,通過方括號(hào)進(jìn)行矩陣索引,圖片的截取方法為
>>> roi = img[233:299,717:783] >>> plt.imshow(roi) <matplotlib.image.AxesImage object at 0x000002E84F5B4948> >>> plt.show()
3顯示強(qiáng)度
為了更加直觀地反映光斑強(qiáng)度,以圖片行列為坐標(biāo),可以繪制3d強(qiáng)度圖。
繪制二維曲線,要求輸入相應(yīng)的自變量和因變量,通過點(diǎn)和點(diǎn)的一一對(duì)應(yīng),畫出曲線。三維圖像繪制亦然,通過np.meshgrid
生成網(wǎng)格坐標(biāo),作為其 x , y x,y x,y向的自變量,其輸入?yún)?shù)為兩個(gè)一維數(shù)組,返回兩個(gè)二維數(shù)組,用以表示這兩個(gè)數(shù)組方向的坐標(biāo)。
>>> xNum,yNum = roi.shape #獲取roi的維度 >>> xAxis,yAxis = np.meshgrid(range(yNum),range(xNum)) #range創(chuàng)建長(zhǎng)度為xNum的自然數(shù)列 >>> ax = plt.gca(projection='3d') #建立3D坐標(biāo)軸 >>> ax.plot_surface(xAxis,yAxis,roi) #創(chuàng)建面元圖 <mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x0000019EAFF19D48> >>> plt.show()
結(jié)果為
4數(shù)據(jù)擬合
光斑在空間中的分布形式呈中心對(duì)稱的特征,故可抽取出其徑向坐標(biāo)進(jìn)行降維操作,考慮到數(shù)據(jù)的穩(wěn)定性,并排除非信號(hào)區(qū)的影響,可提取每一列的最大值
>>> arr = np.max(roi,0) >>> x = np.arange(len(arr)) >>> plt.plot(x,arr) [<matplotlib.lines.Line2D object at 0x0000019EB469EB48>] >>> plt.show()
結(jié)果如圖所示
在python中,需要通過引入科學(xué)計(jì)算庫scipy
中的優(yōu)化擬合包optimize
中的curve_fit
函數(shù)來進(jìn)行數(shù)據(jù)的高斯擬合。curve_fit
的輸入?yún)?shù)為擬合函數(shù),自變量和因變量;輸出參數(shù)為擬合函數(shù)中的其他參數(shù)以及擬合評(píng)價(jià)參數(shù)。
其中高斯函數(shù)的表達(dá)形式為
>>> from scipy.optimize import curve_fit >>> def gauss(x, a, b, c): ... return a*np.exp(-(x-b)**2/c**2) ... >>> abc, para = curve_fit(gauss,x,arr) >>> abc #即上式中的a,b,c array([89.72326971, 35.58522403, 20.86186403]) >>> fitValue = gauss(x,abc[0],abc[1],abc[2]) #擬合值 >>> plt.scatter(x,arr) #繪制原始數(shù)據(jù)的散點(diǎn)圖 <matplotlib.collections.PathCollection object at 0x0000019EB5438D88> >>> plt.plot(x,fitValue) #繪制擬合數(shù)據(jù)的曲線圖 [<matplotlib.lines.Line2D object at 0x0000019EB46D4048>] >>> plt.show()
問題
如果包沒有安裝的話,可以在命令行中用pip
文件進(jìn)行安裝
> pip install numpy > pip install matplotlib > pip install scipy
以上就是Python光學(xué)仿真學(xué)習(xí)處理高斯光束分布圖像的詳細(xì)內(nèi)容,更多關(guān)于Python處理高斯光束分布圖像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python統(tǒng)計(jì)字符串中字母出現(xiàn)次數(shù)代碼實(shí)例
這篇文章主要介紹了python統(tǒng)計(jì)字符串中字母出現(xiàn)次數(shù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03python3中apply函數(shù)和lambda函數(shù)的使用詳解
本文主要介紹了python3中apply函數(shù)和lambda函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-024種Python基于字段的不使用元類的ORM實(shí)現(xiàn)方法總結(jié)
在 Python 中,ORM(Object-Relational Mapping)是一種將對(duì)象和數(shù)據(jù)庫之間的映射關(guān)系進(jìn)行轉(zhuǎn)換的技術(shù),本文為大家整理了4種不使用元類的簡(jiǎn)單ORM實(shí)現(xiàn)方式,需要的可以參考下2023-12-12Python 實(shí)現(xiàn)二叉查找樹的示例代碼
這篇文章主要介紹了Python 實(shí)現(xiàn)二叉查找樹的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12Python中的is和==比較兩個(gè)對(duì)象的兩種方法
這篇文章主要介紹了Python中的is和==比較兩個(gè)對(duì)象的兩種方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09python:批量統(tǒng)計(jì)xml中各類目標(biāo)的數(shù)量案例
這篇文章主要介紹了python:批量統(tǒng)計(jì)xml中各類目標(biāo)的數(shù)量案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03使用Python的Flask框架來搭建第一個(gè)Web應(yīng)用程序
Flask框架是一個(gè)以輕量級(jí)著稱的Web開發(fā)框架,近兩年來在Web領(lǐng)域獲得了極高的人氣,這里我們就來看如何使用Python的Flask框架來搭建第一個(gè)Web應(yīng)用程序2016-06-06