一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python光學仿真實現波長與顏色之間對應關系示例解析

Python光學仿真實現波長與顏色之間對應關系示例解析

2022-02-12 13:20微小冷 Python

這篇文章主要為大家介紹了Python光學仿真實現波長與顏色之間對應關系的示例解析,有需要的我朋友可以借鑒參考下,希望能夠有所幫助

 

光的顏色

與其說顏色是光的一種屬性,不如說是人眼對可見光頻率范圍內的一種感應,是人眼的一種屬性。而人眼對光頻的感應包括三個方面,即明度、色調和飽和度。

其中,

  • 明度與光強有關
  • 色調反應的是光的頻率信息
  • 飽和度表示圖像上的顏色與光譜色的接近程度

當不考慮色調、飽和度為0的時候,只考慮明度,則色彩感消失,就是所謂的黑白圖像,或者更嚴格地說是灰度圖像。

色調與飽和度雖然反應色光的頻率信息,但表現的是人眼對光的反饋特性,與光的頻率是不同的物理量。其與光的頻率之間的對應關系也是由人眼的感光細胞決定的。由于自然界中并不存在嚴格的單色光,人的色覺其實是人眼的兩種感光細胞所產生的色覺的混合。

也就是說,幾種基準頻率的光按照不同的飽和度互相混合,人眼將會感受到顏色的變化,也可以說是產生新的顏色。實驗表明,任意三種不能互相轉換的顏色可以通過互相混合完成對光譜色的一一對應。這樣的三種光叫做三原色,一般選取紅綠藍作為三原色。

Python光學仿真實現波長與顏色之間對應關系示例解析

由于三者已經歸一化,所以只要知道其中兩個值就能夠確定色品,以 r 為橫坐標 g 為縱坐標,就能夠表示出所有可能的色品。這種圖大家并不陌生,在手機發布會上最常見,這里我們畫出一個類似的圖樣

Python光學仿真實現波長與顏色之間對應關系示例解析

def CIE_RGB():
    rgb = np.zeros([1000,1000,3])
    r = np.arange(0,1,0.001)
    r,g = np.meshgrid(r,r)
    rgb[:,:,0] = r
    rgb[:,:,1] = g
    rgb[:,:,2] = 1-r-g
    over = rgb[:,:,2]<0
    rgb[over,:]=[1,1,1]
    #將色品轉化成RGB
    maxVal = np.max(rgb,2)
    for i in [0,1,2]:
        rgb[:,:,i] /= maxVal
    #rgb[rgb<0]=0
    ax = plt.gca()
    ax.imshow(rgb)
    ax.invert_yaxis()    #plt顯示圖片時y軸從上到下,所以反置
    # 坐標映射
    plt.xticks(range(0,1001,200),["0","0.2","0.4","0.6","0.8","1"])
    plt.yticks(range(0,1001,200),["0","0.2","0.4","0.6","0.8","1"])
    plt.show()

然而根據實驗測得,RGB系統的刺激值存在負值,也就是說上圖中其實并沒有將所有的顏色納入其中,所以CIE又推薦了XYZ色度學系統,其本質上是對RGB系統的線性變換,最終讓該系統所對應的刺激值為正數。其公式為

Python光學仿真實現波長與顏色之間對應關系示例解析

 

python實現為

#dWave為波長;maxPix為最大值;gamma為調教參數
def getRGB(dWave,maxPix=1,gamma=1):
    waveArea = [380,440,490,510,580,645,780]
    minusWave = [0,440,440,510,510,645,780]
    deltWave = [1,60,50,20,70,65,35]
    for p in range(len(waveArea)):
        if dWave<waveArea[p]:
            break
    pVar = abs(minusWave[p]-dWave)/deltWave[p]
    rgbs = [[0,0,0],[pVar,0,1],[0,pVar,1],[0,1,pVar],
            [pVar,1,0],[1,pVar,0],[1,0,0],[0,0,0]]
        #在光譜邊緣處顏色變暗
    if (dWave>=380) & (dWave<420):
        alpha = 0.3+0.7*(dWave-380)/(420-380)
    elif (dWave>=420) & (dWave<701):
        alpha = 1.0
    elif (dWave>=701) & (dWave<780):
        alpha = 0.3+0.7*(780-dWave)/(780-700)
    else:
        alpha = 0       #非可見區
    return [maxPix*(c*alpha)**gamma for c in rgbs[p]]

 

繪制光譜

def drawSpec():
    pic = np.zeros([100,360,3])
    rgb = [getRGB(d) for d in range(400,760)]
    pic = pic+rgb
    plt.imshow(pic)
    plt.yticks([])      #隱藏y坐標軸
    plt.xticks(range(0,360,50),["400","450","500","550","600","650","700","750"])
    plt.show()

Python光學仿真實現波長與顏色之間對應關系示例解析

以上就是Python光學仿真實現波長與顏色之間對應關系示例解析的詳細內容,更多關于Python光學仿真波長與顏色對應關系的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/m0_37816922/article/details/103457744

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: xxx老妇人60 xxxx意大利xxxxhd | 99久久久久国产 | 国产成人夜色影视视频 | 91免费播放 | 欧美在线成人免费国产 | 大陆性出航 | 亚洲 色 欧美 爱 视频 日韩 | 日韩精品视频在线播放 | 亚洲人成网站在线观看90影院 | 特黄特色大片免费高清视频 | 99在线观看视频免费精品9 | 久久精品无码人妻无码AV蜜臀 | 久久人妻少妇嫩草AV無碼 | 亚洲区精品久久一区二区三区 | 小早川怜子亚洲综合中文字幕 | 99在线观看免费视频 | 俄罗斯引擎首页进入 | 小黄文污到你湿 | 女人肮脏的交易中文字幕未删减版 | 亚洲天堂视频在线免费观看 | 亚洲精品国偷拍自产在线观看蜜臀 | japanese在线看 | 国产成人精品午夜视频' | 日韩色在线观看 | 教室里老师好紧h | 黑人巨大和日本娇小中出 | 国产麻豆精品免费视频 | 久久精麻豆亚洲AV国产品 | 免费在线电视 | 欧美日韩国产一区二区三区不卡 | 亚洲精品色综合久久 | 亚洲欧美日韩成人一区在线 | 国产馆在线观看免费的 | 成人在线一区二区 | 狠狠五月天中文字幕 | 日韩欧美中文字幕一区二区三区 | 免费观看二十女人一摸是水 | 欧美老肥妇bbb | 亚洲精品在线看 | 美女脱一光二净的视频 | 粉嫩高中生第一次不戴套 |