You are on page 1of 10

2011 NTUST B9702111 林可昀

以 DE2-70 實作前置
影像處理

姓名: 林可昀
班級: 四電子三乙
學號: B9702111
DATE: 2011/1/4
2011 NTUST B9702111 林可昀

Abstract
之前已經寫出純 verilog 的二值化處理,延續之前的程式,這次我將基本的
影像處理一併完成。

Introduction
使用環境:
Quartus II 8.1 + DE2-70 + Verilog + VGA

這次的練習,一樣是以 CMOS sensor 搭配 DE2-70 做為平台。為了提高


運算速度,這個系統基本上完全是以硬體的方式(純 verilog)完成。目的是希望,
灰階與二值化這類的影像前置處理,就不需要大費周章交給 NIOS 和 Avalon
Bus 處理,大大簡化整個系統的複雜度。

面臨的挑戰 用 Verilog 做影像處理!


之前用 C 或 OPENCV 來做影像處理,都是先將每個 pixel 的 RGB 放在三維
或二維陣列中,利用陣列的特性,我們只要調整 INDEX,就能掌握每個 pixel
的 RGB 資訊,並且使用 MASK 的方式進行更複雜的處理。

但是如果是用 Verilog 做影像處理該怎麼辦?

影像不斷地從 CMOS 進來,經過 SDRAM,然後不斷從 VGA 跑出去,


SDRAM 基本上已經變成一個 BUFFER 了! 因此現在遇到一個問題,我沒有辦
法使用記憶體位址的概念去存取每個 pixel 的 RGB 資訊,換句話說,沒辦法用
陣列的方式完成。這是用 Verilog 做影像處理所面臨最大的挑戰。

因此如果用 Verilog 做影像處理,就要改變想法。想法的改變在於,我們要


把影像的資料當作自來水一直流進來,我們不再掃描陣列、不再計算 pixel。而
是被動式的接收資料,我們要設計一個特別的 GATE 來改變資料的流動規則。

就像是在設計水管,將水管彎曲、分流或加上濾網,最後再把結果,用掃描
射到 VGA SCREEN 上。
2011 NTUST B9702111 林可昀

系統架構
2011 NTUST B9702111 林可昀

Verilog 做影像處理
最關鍵的部分就是 Buffer 的運用,假設我要做 Dilation,基本上必須知道 pixel
的資料和該 pixel 周圍的資料。如下圖:

V V V
V A V
V V V
如果要計算 pixelA,必須得知周圍 pixel 的資料

Solution: use buffer


由於我的 VGA 是 1280X1024,在此我使用三個 Distance 為 1280 的 buffer,
資料不斷 SHIFT 進來,下圖為我使用的設計架構

P1、P2、P3….P9 皆為 Register
基本上就是用這個概念來做,verilog 就能夠模仿陣列的格式,由於資料像自來
水一樣不斷的流不停的流進來,我們已經不用考慮 pixel 掃描的動作,只要設定
好這 9 個 pixel 之間的運算機制,然後將運算結果送至 VGA 顯示,VGA 的掃描
動作在之前的報告已經有解釋。

EROSION 的運算機制:
/*
Filename : Erosion.v
Compiler : Quartus II 8.1
Description : Erosion on DE2-70
Date : 1/3/2011 1.0
*/
module Erosion (
2011 NTUST B9702111 林可昀

input iCLK,
input iRST_N,
input iDVAL,
input [9:0] iDATA,
output reg oDVAL,
output reg [9:0] oDATA
);
wire [7:0] line0;
wire [7:0] line1;
wire [7:0] line2;
reg [9:0] P1, P2, P3, P4, P5, P6, P7, P8, P9;

LineBuffer_3 for_erosion (
.clken(iDVAL),
.clock(iCLK),
.shiftin(iDATA[9:2]),
.taps0x(line0),
.taps1x(line1),
.taps2x(line2)
);

always@(posedge iCLK, negedge iRST_N) begin


if (!iRST_N)
begin
oDVAL <= 0;
P1 <= 0;
P2 <= 0;
P3 <= 0;
P4 <= 0;
P5 <= 0;
P6 <= 0;
P7 <= 0;
P8 <= 0;
P9 <= 0;
end
else begin
oDVAL <= iDVAL;
P1 <= P2;
2011 NTUST B9702111 林可昀

P2 <= P3;
P3 <= line2;
P4 <= P5;
P5 <= P6;
P6 <= line1;
P7 <= P8;
P8 <= P9;
P9 <= line0;
if (iDVAL)
oDATA <= P1^P2^P3^P4^P5^P6^P7^P8^P9;
else
oDATA <= 0;
end
end

endmodule

Dilation 的運算機制也一樣,換湯不換藥,關鍵在於
oDATA <= P1|P2|P3|P4|P5|P6|P7|P8|P9;

動作畫面:

如上圖 DE2-70+CMOS 實驗平台


2011 NTUST B9702111 林可昀

上圖為彩色模式

上圖為灰階模式
2011 NTUST B9702111 林可昀

上圖為二值化模式

上圖為 SOBEL 模式
2011 NTUST B9702111 林可昀

上圖為第 1 次 EROSION

上圖為第 1 次 DILATION
2011 NTUST B9702111 林可昀

上圖為第 2 次 DILATION

上圖為第 2 次 EROSION
由於照片是用手機拍的,有些圖比較不清楚,但就本質而言,目前已經完成純硬
體的前置影像處理,而且速度超快,完全沒有 DELAY,已達到最初提高速度、
降低系統複雜度的理念。

You might also like