您當前的位置:首頁 > 攝影

FPGA實現偽彩色影象

作者:由 FPGA自習室 發表于 攝影時間:2021-08-25

偽彩色影象

一、原理介紹:

偽彩色(Pseudo-color)影象的每個畫素的顏色不是由每個基本色分量的數值直接決定,實際上是把畫素當成調色盤(Palettes)或顏色查詢表(Color Look-Up Table,CLUT)的表項入口地址,根據該地址可查找出包含實際R、G、B的強度值,如果影象中的顏色在調色盤或彩色查詢表中不存在,則調色盤會用一個最為接近的顏色來匹配。透過查找出的R、G、B強度值產生的色彩不是影象本身真正的顏色,因此稱為偽彩色。

偽彩色處理:

將彩色影象轉換為灰度影象是一個不可逆的過程,灰度影象也不可能變換為原來的彩色影象。而某些場合需要將灰度影象轉變為彩色影象;偽彩色處理主要是把黑白的灰度影象或者多波段影象轉換為彩色影象的技術過程。其目的是提高影象內容的可辨識度。其中方法有,灰度分成法,灰度變換法。

真彩色

(true color)真彩色是指在組成一幅彩色影象的每個畫素值中,有R,G,B三個基色分量,每個基色分量直接決定顯示裝置的基色強度,這樣產生的彩色稱為真彩色。例如用RGB 8∶8∶8表示的彩色影象,R,G,B各用8位,用R,G,B分量大小的值直接確定三個基色的強度,這樣得到的彩色是真實的原圖彩色。

在許多場合,真彩色圖通常是指RGB 8:8:8,即影象的顏色數等於2^24,也常稱為全綵色(full color)影象。但在顯示器上顯示的顏色就不一定是真彩色,要得到真彩色影象需要有真彩色顯示介面卡,在PC上用的VGA介面卡是很難得到真彩色影象的。

直接色

(direct color)每個畫素值分成R,G,B分量,每個分量作為單獨的索引值對它做變換。也就是透過相應的彩色變換表找出基色強度,用變換後得到的R,G,B強度值產生的彩色稱為直接色。它的特點是對每個基色進行變換。

用這種系統產生顏色與真彩色系統相比,相同之處是都採用R,G,B分量決定基色強度,不同之處是後者的基色強度直接用R,G,B決定,而前者的基色強度由R,G,B經變換後決定。因而這兩種系統產生的顏色就有差別。試驗結果表明,使用直接色在顯示器上顯示的彩色影象看起來真實、很自然。

這種系統與偽彩色系統相比,相同之處是都採用查詢表,不同之處是前者對R,G,B分量分別進行變換,後者是把整個畫素當作查詢表的索引值進行彩色變換。

二、Matlab與Modelsim模擬

2.1

影象產生

如下圖3所示,使用matlb將解析度為640*480的len。bmp 影象的R、G、B各個分量的二維影象資料,如圖4所示,轉換成一維資料存到img_r_data。txt、img_g_data。txt、img_b_data。txt文本里供Modelsim讀取。

FPGA實現偽彩色影象

圖3 matlab gen 程式碼

2.2

影象處理

2。2。1 rgbtoyuv 灰度化演算法公式

採用rgbtoyuv格式的顏色空間的轉換影象演算法為例,轉換公式如下 ,

FPGA實現偽彩色影象

2。2。2 graytorgb偽彩演算法公式

如下圖所示是matalb 程式碼 ,三個顏色通道對應3個公式:

FPGA實現偽彩色影象

2。2。3 FPGA實現

在FPGA實現過程中,沒有直接使用上述matlab程式碼的”if-else”進行影象的點操作,這裡我使用查詢表的方式實現,把三個顏色通道R、G、B 看成是灰度(0~255)的函式,透過matlab得到各個顏色的對映值的mif檔案,然後匯入fpga的rom 中,當畫素進來時直接作為的rom的讀地址,rom的輸出就是處理得到的偽彩色影象。生成mif檔案的matlab程式碼,其中t可以理解為灰度值,R、G、B為各顏色通道值。

FPGA實現偽彩色影象

FPGA實現偽彩色影象

FPGA實現時分別把對應的線性對映數值存到rom中:

FPGA實現偽彩色影象

2.3

影象顯示

在編寫完RTL程式碼後加入影片流模擬平臺,處理的後的結果如圖6所示,其中影象的復現的matlab程式碼如圖5所示:

FPGA實現偽彩色影象

圖5 matlab show 程式碼

FPGA實現偽彩色影象

歡迎大家關注:微信公眾號:FPAG自習室

標簽: 影象  彩色影象  基色  彩色  灰度