天天看點

FPGA圖像處理7_常用算法_解 Bayer 格式

Debayer

Debayer 算法譯成中文為解 Bayer 格式。

Bayer 格式指的是大多數彩色圖像傳感器在每個像素點位置隻感應 RGB 三通道中一個通道的顔色,用于節約制造成本。而且由于人眼對綠色較為敏感,50% 的像素點感應 G,25% 的像素點感應 R,25% 的像素點感應 B。

不同型号的圖像傳感器像素點的 RGB 分布不同,比較典型的分布如下圖所示:

FPGA圖像處理7_常用算法_解 Bayer 格式

由于每個像素點隻有 1 個顔色通道的數值,對于其不包含的 2 個顔色通道的資料,由其周邊 3 × 3 3\times 3 3×3(G通道使用 5 × 5 5\times 5 5×5)範圍内對應顔色通道的均值表示。

在 sysgen 實作時,需要根據目前像素點的行列坐标的奇偶選擇對應顔色通道的計算方法。

圖像資料首先進入 5 × 5 5\times 5 5×5二維緩沖子產品,取出用于計算的全部緩沖資料,及緩沖後的像素點坐标 buf_x 和 buf_y:

FPGA圖像處理7_常用算法_解 Bayer 格式

用 Slice 子產品截取緩沖後像素點坐标的最低位 LSB ,用于判斷坐标值的奇偶:

FPGA圖像處理7_常用算法_解 Bayer 格式

Slice 子產品配置如下:

FPGA圖像處理7_常用算法_解 Bayer 格式

行列坐标的 LSB 用 Concat 子產品合并為 2 比特,送入 Mux 子產品根據行列坐标奇偶狀态在 4 個計算通道中選擇:

FPGA圖像處理7_常用算法_解 Bayer 格式
R 通道計算

位置示意圖中心點為目前用于計算的像素點, 5 × 5 5\times 5 5×5 二維緩沖輸出并行像素點中,pix22 為目前像素點,對應位置示意圖中心點。

将以下 4 種情況的計算結果對齊時序後送入前述的行列奇偶判斷 Mux 中進行輸出選擇。

偶行偶列:周邊隻有 pix21 和 pix23 為 R 通道,由此 2 值的均值作為目前像素點的R值。

FPGA圖像處理7_常用算法_解 Bayer 格式

偶行奇列:目前像素點即為 R 通道,直接取用 pix22 的數值。

FPGA圖像處理7_常用算法_解 Bayer 格式

奇行偶列:周邊有 pix11、pix13、pix31、pix33 為 R 通道,由此 4 值的均值作為目前像素點的 R 值。

FPGA圖像處理7_常用算法_解 Bayer 格式

奇行奇列:周邊有 pix12 和 pix32 為 R 通道,由此 2 值的均值作為目前像素點的 R 值。

FPGA圖像處理7_常用算法_解 Bayer 格式
B 通道計算
FPGA圖像處理7_常用算法_解 Bayer 格式

送入 Mux 的 4 路計算結果,根據 B 通道的位置進行排序,共用 R 通道部分的計算結果:

  • ave12_32 指向 pix12 和 pix32 的均值
  • ave11_13_31_33 指向 pix11、pix13、pix31、pix33 的均值
  • ave21_23 指向 pix21 和 pix23 的均值
G 通道的計算

G 通道的計算最為特殊,不單純時周邊 G 通道像素點的均值,還需要判斷 RB 通道的

偶行偶列與奇行奇列都為 G 通道,直接取 pix22 值:

FPGA圖像處理7_常用算法_解 Bayer 格式

偶行奇列和奇行偶列的計算原理如下:

偶行奇列:

FPGA圖像處理7_常用算法_解 Bayer 格式

G ( R ) = { G 1 + G 3 2 ∣ R 1 − R 3 ∣ &lt; ∣ R 2 − R 4 ∣ G 2 + G 4 2 ∣ R 1 − R 3 ∣ &gt; ∣ R 2 − R 4 ∣ G 1 + G 2 + G 3 + G 4 4 ∣ R 1 − R 3 ∣ = ∣ R 2 − R 4 ∣ G(R)=\begin{cases} \frac{G1+G3}{2}&amp;\lvert R1-R3\rvert&lt;\lvert R2-R4\rvert\\ \frac{G2+G4}{2}&amp;\lvert R1-R3\rvert&gt;\lvert R2-R4\rvert\\ \frac{G1+G2+G3+G4}{4}&amp;\lvert R1-R3\rvert=\lvert R2-R4\rvert \end{cases} G(R)=⎩⎪⎨⎪⎧​2G1+G3​2G2+G4​4G1+G2+G3+G4​​∣R1−R3∣<∣R2−R4∣∣R1−R3∣>∣R2−R4∣∣R1−R3∣=∣R2−R4∣​

奇行偶列:

FPGA圖像處理7_常用算法_解 Bayer 格式

G ( B ) = { G 1 + G 3 2 ∣ B 1 − B 3 ∣ &lt; ∣ B 2 − B 4 ∣ G 2 + G 4 2 ∣ B 1 − B 3 ∣ &gt; ∣ B 2 − B 4 ∣ G 1 + G 2 + G 3 + G 4 4 ∣ B 1 − B 3 ∣ = ∣ B 2 − B 4 ∣ G(B)=\begin{cases} \frac{G1+G3}{2}&amp;\lvert B1-B3\rvert&lt;\lvert B2-B4\rvert\\ \frac{G2+G4}{2}&amp;\lvert B1-B3\rvert&gt;\lvert B2-B4\rvert\\ \frac{G1+G2+G3+G4}{4}&amp;\lvert B1-B3\rvert=\lvert B2-B4\rvert \end{cases} G(B)=⎩⎪⎨⎪⎧​2G1+G3​2G2+G4​4G1+G2+G3+G4​​∣B1−B3∣<∣B2−B4∣∣B1−B3∣>∣B2−B4∣∣B1−B3∣=∣B2−B4∣​

完整的計算如下:

FPGA圖像處理7_常用算法_解 Bayer 格式

內插補點絕對值的比較,用 2 級 Mux 進行選擇:

FPGA圖像處理7_常用算法_解 Bayer 格式

3 種均值計算結果作為 2 級 Mux 的輸入:

FPGA圖像處理7_常用算法_解 Bayer 格式