Alpha算法的研究
Alpha通道是一個8位的灰度通道,該通道用256級灰度來記錄圖像中的透明度信息,定義透明、不透明和半透明區(qū)域,其中黑表示全透明,白表示不透明,灰表示半透明[15]。
半透明混合算法目前在常用到的算法是AlphaBlend。其算法如下:假設一幅圖象是A,另一幅透明的圖象是B,那么透過B去看A,看上去的圖象C就是B和A的混合圖象,設B圖象的透明度為alpha(取值為0-1,1為完全透明,0為完全不透明)。Alpha每個通道色彩混合公式如下:
R(x)、G(x)、B(x)分別指顏色x的RGB分量原色值。從上面的公式可以知道,Alpha其實是一個決定混合透明度的數(shù)值。改變這個 alpha 值可以得到一個漸變的效果。分離RGB色用"位與"、"移位"運算的方法。
透明的比例按2的N次冪來分級,這樣可以快速運算。如果是按256級Alpha = 1/256,B圖的權(quán)重 = (256-n)/256,則A圖的權(quán)重= n/256,由式 6-1可以得到紅色通道256級半透明算法:
1.2. Alpha算法實現(xiàn)
1.2.1. Matlab代碼
% ----------------------------------------------------------------------- % CONFIDENTIAL IN CONFIDENCE % This confidential and proprietary software may be only used as authorized % by a licensing agreement from CrazyBingo (Thereturnofbingo). % In the event of publication, the following notice is applicable: % Copyright (C) 2011-201x CrazyBingo Corporation % The entire notice above must be reproduced on all authorized copies. % Author : CrazyBingo % Technology blogs : http://blog.chinaaet.com/crazybingo % http://www.cnblogs.com/crazybingo % Eamil Address : thereturnofbingo@gmail.com % Filename : RGB_Alpha.m % Data : 2013-04-22 % Version : 1.0 % Description : Alpha Algorithm of 2 RGB Image. % Modification History : % Data By Version Change Description %======================================================================= % 13/04/22 CrazyBingo 1.0 Original % ----------------------------------------------------------------------- clear all; %清除Matlab緩存數(shù)據(jù) % ----------------------------------------------------------------------- % Read PC iamge to Matlab IMG1 = imread('E:Matlab_InformationMatlab_ProjectBMPFish2.bmp'); % 讀取RGB文件,X光的魚圖 IMG2 = imread('E:Matlab_InformationMatlab_ProjectBMPWater.bmp'); % 讀取RGB文件,綠葉湖泊 h = size(IMG1,1); % 讀取圖像高度 w = size(IMG1,2); % 讀取圖像寬度 figure(1); subplot(1,2,1); imshow(uint8(IMG1)); subplot(1,2,2); imshow(uint8(IMG2)); % ----------------------------------------------------------------------- % IMG1 add tO IMG2 with alpha algorthm ALPHA_PARAM = 0.6; IMG1 = double(IMG1); IMG2 = double(IMG2); IMG3 = zeros(h,2,3); for i = 1 : h for j = 1 : w IMG3(i,j,1) = IMG1(i,j,1)*ALPHA_PARAM + IMG2(i,j,1)*(1-ALPHA_PARAM); IMG3(i,j,2) = IMG1(i,j,2)*ALPHA_PARAM + IMG2(i,j,2)*(1-ALPHA_PARAM); IMG3(i,j,3) = IMG1(i,j,3)*ALPHA_PARAM + IMG2(i,j,3)*(1-ALPHA_PARAM); end end % ------------------------------------------------------------------------- figure(2); imshow(uint8(IMG3)); title('Alpha Image with IMG1 & IMG2'); imwrite(IMG3,'E:Matlab_InformationMatlab_ProjectRGB_Alpha_ProcessRGB_Alpha.bmp'); %保存重建后的BMP
1.2.2. 效果圖
1.2.3.半透明算法的FPGA實現(xiàn)
在Verilog中,通過組合邏輯,運用內(nèi)嵌乘法器,以及移位運算,可以快速實現(xiàn)對兩幅圖像的透明度的實時控制。設計中設定了256級半透明級數(shù),通過按鍵來控制alpha_data的參數(shù),從而實現(xiàn)調(diào)節(jié)兩幅圖像之間的透明度。Verilog算法如下所示:
1 wire [15:0] red_data = ((8'd255-alpha_data)* lcd_data_reg[15:11]+ alpha_data * lcd_data_in[15:11])>> 8; //紅色通道 2 3 wire [15:0] gre_data = ((8'd255-alpha_data)*lcd_data_reg[10:5]+ alpha_data * lcd_data_in[10:5])>> 8; //綠色通道 4 5 wire [15:0] blu_data = ((8'd255-alpha_data)*lcd_data_reg[4:0]+ alpha_data * lcd_data_in[4:0])>> 8; //藍色通道 6 7 assign lcd_data = disp_area?{red_data[4:0],gre_data[5:0], blu_data[4:0]} : lcd_data_reg; //RGB合并
為測試半透明算法,將分形圖與彩條疊加,通過外部按鍵的調(diào)節(jié),驗證了此半透明算法的正確性。VGA半透明圖形疊加如下圖所示,此時即可見分形圖,又可見8條彩條,兩者相互融合。
圖 6-1 半透明算法驗證圖
-
matlab
+關(guān)注
關(guān)注
185文章
2976瀏覽量
230474 -
RGB
+關(guān)注
關(guān)注
4文章
798瀏覽量
58505 -
乘法器
+關(guān)注
關(guān)注
8文章
205瀏覽量
37060 -
Alpha
+關(guān)注
關(guān)注
0文章
45瀏覽量
25620 -
按鍵控制
+關(guān)注
關(guān)注
1文章
44瀏覽量
8780
原文標題:Alpha半透明圖形疊加算法Matlab+Verilog實現(xiàn)
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論