基于FPGA的圖像拉普拉斯銳化處理 騰訊鏈接:https://share.weiyun.com/5GQyKKc 百度網盤鏈接:https://pan.baidu.com/s/1M7PLzRs-yMJv7NFJE8GVAw 提取碼:qr0t ![]() 如圖所示,這是整個視頻采集系統的原理框圖。上電初始,FPGA需要通過IIC接口對CMOS Sensor進行寄存器初始化配置。這些初始化的基本參數,即初始化地址對應的初始化數據都存儲在一個預先配置好的FPGA片內ROM中。在初始化配置完成后,CMOS Sensor就能夠持續輸出標準RGB的視頻數據流,FPGA通過對其同步信號,如時鐘、行頻和場頻進行檢測,從而從數據總線上實時的采集圖像數據。MT9V034攝像頭默認初始化數據就能輸出正常的視頻流,因此FPGA中實際上未作任何IIC初始化配置。 在FPGA內部,采集到的視頻數據先通過一個FIFO,將原本25MHz頻率下同步的數據流轉換到50MHz的頻率下。接著將這個數據再送入寫DDR3緩存的異步FIFO中,這個FIFO中的數據一旦達到一定數量,就會寫入DDR3中。與此同時,讀取DDR3中緩存的圖像數據,緩存到FIFO中,并最終送往LCD驅動模塊進行顯示。LCD驅動模塊不斷的發出讀圖像數據的請求,并驅動液晶顯示器顯示視頻圖像。 本實例除了前面提到對原始圖像做DDR3緩存和顯示,還會在原始圖像緩存到DDR3之前,另外做圖像的多行緩存和拉普拉斯銳化處理,獲得新的銳化后的圖像流,這個圖像流寫入到DDR3中。根據LCD顯示模塊的請求,讀取DDR3中處理后的圖像進行顯示。最終在VGA液晶顯示器上,可以看到左側圖像是原始的圖像,右側圖像是經過銳化處理后的圖像。
![]() 在圖像增強中,平滑是為了消除圖像中噪聲的干擾,或者降低對比度。與之相反,有時為了強調圖像的邊緣和細節,需要對圖像進行銳化,提高對比度。 拉普拉斯銳化圖像是根據圖像某個像素的周圍像素到此像素的突變,也就是說它的依據是圖像像素的變化程度。我們知道,一個函數的一階微分描述了函數圖像是朝哪里變化的,即增長或者降低;而二階微分描述的則是圖像變化的速度,急劇增長下降還是平緩的增長下降。那么據此我們可以猜測出依據二階微分能夠找到圖像的色素的過渡程度,例如白色到黑色的過渡就是比較急劇的。 或者用官方點的話說:當鄰域中心像素灰度低于它所在的領域內其它像素的平均灰度時,此中心像素的灰度應被進一步降低,當鄰域中心像素灰度高于它所在的鄰域內其它像素的平均灰度時,此中心像素的灰度應被進一步提高,以此實現圖像的銳化處理。 2.2拉普拉斯(laplace)算子最常用的無方向性的二階差分算子,其模板有3*3、5*5和7*7等多種形式。。 例如,以3*3算子為例,1~8像素是(x,y)點周圍鄰近的8個像素點。可以使用右側的2種模板對(x,y)以及周邊4或8個像素點進行運算,替代原來的(x,y)點。 ![]() ![]() ![]() 當然了,根據中心點的權重程度,也可以使用如下2中模板來實現圖像銳化。 ![]() ![]() 基于第一種拉普拉斯銳化處理,我們的Matlab代碼如下:
![]() clear clc I1=imread('.\lena.jpg'); I=im2double(I1); [m,n,c]=size(I); A=zeros(m,n,c); %for R for i=2:m-1 for j=2:n-1 A(i,j,1)=I(i+1,j,1)+I(i-1,j,1)+I(i,j+1,1)+I(i,j-1,1)-4*I(i,j,1); end end %for G for i=2:m-1 for j=2:n-1 A(i,j,2)=I(i+1,j,2)+I(i-1,j,2)+I(i,j+1,2)+I(i,j-1,2)-4*I(i,j,2); end end %for B for i=2:m-1 for j=2:n-1 A(i,j,3)=I(i+1,j,3)+I(i-1,j,3)+I(i,j+1,3)+I(i,j-1,3)-4*I(i,j,3); end end B=I-A; %output imwrite(B,'lena.tif','tif'); imshow('.\lena.jpg');title('origin image');figure imshow('lena.tif');title('image after laplace transform') 濾波效果如下。
![]() Matlab源碼、Lena.jpg原圖和比對圖存放在at7_img_ex02\matlab文件夾下。 3基于FPGA的圖像平滑處理 工程文件夾at7_img_ex02\zstar.srcs\sources_1\new下的laplace_transform.v模塊實現了拉普拉斯銳化處理。該模塊功能框圖如下,使用2個FIFO,分別緩存前后行,即進入圖像處理的3組數據流分別是第n-1行、第n行和第n+1行的圖像,控制輸入數據流和2個FIFO緩存的圖像在同一個位置、寄存器對前后2個像素的圖像值進行緩存,這樣便可實現中心像素點以及前后列、上下行之間數據的同步處理了。
![]() AT7_Xilinx開發板(USB3.0+LVDS)資料共享 騰訊鏈接:https://share.weiyun.com/5GQyKKc 百度網盤鏈接:https://pan.baidu.com/s/1M7PLzRs-yMJv7NFJE8GVAw 提取碼:qr0t |