灰度圖 ,Gray Scale Image 或是Grey Scale Image,又稱灰階圖。把白色與黑色之間按對數關係分為若干等級,稱為灰度。8位像素灰度分為256階。用灰度表示的圖像稱作灰度圖。除了常見的衛星圖像、航空照片外,許多地球物理觀測數據也以灰度表示。除了常見的衛星圖像、航空照片外,許多地球物理觀測數據也以灰度表示。以位場圖像為例,把位場表示為灰度圖,需要將位場觀測值灰度量化,即將場的變化範圍轉換成256階的灰度範圍。由於位場的動態變化範圍非常大,磁場可達數萬個納特,重力場也可能在數百個重力單位內變化,所以在顯示為圖像前通常需要對位場觀測值進行拉伸或壓縮。
灰度圖計算將彩色圖像轉換為灰度圖像的方法有兩種:
本文採用第二種方法,採用xilinx FPGA提供的IP。
算法基礎官方給的RGB888轉YCrCb的算法公式:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.568(B-Y) + 128 = -0.172R -0.339G + 0.511B + 128
Cr = 0.713(R -Y) + 128 = 0.511R - 0.428G - 0.083B + 128
矩陣表示如下
整數算法在實際應用時,希望避免低速的浮點運算,所以需要整數算法。
注意到係數都是3位精度,我們可以將它們縮放1000倍來實現整數運算算法:
Y = (R299 + G587 + B*114 + 500) / 1000。
RGB一般是8位精度,現在縮放1000倍,所以上面的運算是32位整型的運算。注意後面那個除法是整數除法,所以需要加上500來實現四捨五入。
就是由於該算法需要32位運算,所以該公式的另一個變種很流行(只擴大100倍):
Y = (R30 + G59 + B*11 + 50) / 100。
FPGA實現算法上面的整數算法已經很快了,但是有一點仍制約速度,就是最後的那個除法。FPGA實現出發很消耗資源很且很慢,移位比除法快多了,所以可以將係數縮放成2的整數冪。由於FPGA實現小數無法計算,所以進行變換(將小數擴大256,最後結果再除以256),公式如下
Y = ((77R + 150G + 29*B)>>8)
Cb = ((-43B - 85G + 128*B)>>8) + 128
Cr = ((128R - 107G - 21*B)>>8) + 128
灰度圖實現matlab實現結果X=imread(I); %讀入圖片
I=mat2gray(X);%將數值矩陣X轉換為灰度圖像
figure,imshow(I); %顯示轉換後的灰度圖像
如果你對實現過程感興趣,可以參考連結,網友們都寫的很好,小編會後面出一個各種視頻格式轉換的通用模塊,敬請關注。
使用IP如下圖所示,支持AXI Stream接口(根據視頻的解析度進行配置即可)。
RGB2YCrcb IP硬體位置
實現結果如下圖
https://blog.csdn.net/dengxf01/article/details/53287227
https://www.cnblogs.com/huangwei0521/p/12382238.html
https://www.cnblogs.com/ninghechuan/p/6978104.html
長按二維碼關注公眾號後臺回復【灰度圖】可獲取相關資料