摘要: 光源發射光的顏色與黑體在某一溫度下輻射光色相同時,黑體的溫度稱為該光源的色溫。在各種不同的色溫下,目標物的色彩會產生變化。其中,白色物體變化得最為明顯。為了盡可能減少外來光線對目標顏色造成的影響,在不同的色溫條件下都能還原出被攝目標本來的色彩,需要進行色彩校正,以達成正確的色彩平衡,也就是達到白平衡。 一、軟件介紹 本系統采用了LATTICE的XP系列芯片,所用軟件為splever7.0,應用本軟件有一個新加功能,可以用FPGA的底層資源生成一個簡單CPU的框架,并且在軟件的庫里邊,有很多的模塊可以調用,例如GPIO接口,I2C接口等。本系統的設計使用的是I2C接口。 二、系統構成 圖1 系統框圖 本系統(系統框圖如圖1)是采用FPGA進行實時運算。從cmos傳感器出來的數字信號首先經過白平衡處理模塊,在這個模塊中,需要對圖象中的R、G、B的分量分別進行計算,求出他們各自的均值。一般情況下,只有當他們各自的均值為128或者129的時候,我們可以認為圖象達到了白平衡的狀態,當然有一個前提就是要對一個白色的背景取圖。如果他們的均值不相等,或者沒有達到128或者129的值時,給I2C模塊一個信號,使之對傳感器的顏色分量寄存器進行設置,直到完全為我們所期待的數值為止。 三、部分程序和接口 module send( reset_n, clk, vsync, href, data_in, data_out); input reset_n; //系統復位信號 input clk; //系統時鐘 input vsync; //廠信號 input href; //行信號 input [9:0]data_in; //圖象數據 output [29:0]data_out;//色彩分量均值 reg [25:0]count_r; always@(negedge clk or posedge posevsync)begin if(posevsync) count_r <= 26'h00000000; else begin if(hs_count>=10'd129&&hs_count<=10'd640) begin if((pixcount>=11'd384&&pixcount<=11'd895)&&row_odd_href) begin if(!row_odd_pix) count_r <= count_r + data_in; else count_r <= count_r; end else count_r <= count_r; end else count_r <= count_r; end end reg [26:0]count_g; always@(negedge clk or posedge posevsync)begin if(posevsync) count_g <= 27'h00000000; else begin if(hs_count>=10'd129&&hs_count<=10'd640) begin if(pixcount>=11'd384&&pixcount<=11'd895) begin if(row_odd_href) begin if(row_odd_pix) count_g <= count_g + data_in; else count_g <= count_g; end else begin if(!row_odd_pix) count_g <= count_g + data_in; else count_g <= count_g; end end else count_g <= count_g; end else count_g <= count_g; end end reg [25:0]count_b; always@(negedge clk or posedge posevsync)begin if(posevsync) count_b <= 26'h00000000; else begin if(hs_count>=10'd129&&hs_count<=10'd640) begin if((pixcount>=11'd384&&pixcount<=11'd895)&&(!row_odd_href)) begin if(row_odd_pix) count_b <= count_b + data_in; else count_b <= count_b; end else count_b <= count_b; end else count_b <= count_b; end end reg [29:0]data_out; always@(negedge vsync or negedge reset_n)begin if(!reset_n) data_out <= 30'h0000000000; else data_out <= {count_r[25:16], count_g[26:17], count_b[25:16]}; end 四、仿真圖形 系統的總體仿真圖如圖2 圖2 系統仿真圖 五、結論 采用FPGA對自動白平衡進行運算的一個最大的優點就是所有的操作都是實時進行,不需要先緩存一整張圖象,所以中間沒有延時,不僅運算速度快,而且圖像的相質還可以得到很好的改良。 |