www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > FPGA開源工作室

基于FPGA的二值圖像的膨脹算法的實(shí)現(xiàn)

1 背景知識(shí)

二值圖像(Binary Image)是指將圖像上的每一個(gè)像素只有兩種可能的取值或灰度等級(jí)狀態(tài),人們經(jīng)常用黑白、B&W、單色圖像表示二值圖像。二值圖像是指在圖像中,灰度等級(jí)只有兩種,也就是說,圖像中的任何像素不是0就是1,再無其他過渡的灰度值。

二值圖像經(jīng)常出現(xiàn)在數(shù)字圖像處理中作為圖像掩碼或者在圖像分割二值化dithering的結(jié)果中出現(xiàn)。一些輸入輸出設(shè)備,如激光打印機(jī)、傳真機(jī)、單色計(jì)算機(jī)顯示器等都可以處理二值圖像。

二值圖像經(jīng)常使用位圖格式存儲(chǔ)。

二值圖像可以解釋為二維整數(shù)格,圖像變形處理領(lǐng)域很大程度上就是受到這個(gè)觀點(diǎn)啟發(fā)。

膨脹與腐蝕是形態(tài)學(xué)濾波的兩個(gè)基本運(yùn)算,能實(shí)現(xiàn)多種多樣的功能,主要功能如下:

(1)消除噪聲;

(2)分割出獨(dú)立的圖像元素;

(3)在圖像中連接相鄰的元素;

(4)尋找圖像中明顯的極大值和極小值區(qū)域;

(5)求出圖像的梯度。

膨脹數(shù)學(xué)模型:

1

1 具有斷裂文字的低分辨率樣品文字(見放大的視圖)

如圖1所示,a為具有斷裂文字的低分辨率樣品文字(見放大的視圖),b為結(jié)構(gòu)元,c為圖b對(duì)a的膨脹。斷裂線段被連接起來了。

2 膨脹算法

在這里我們演示黑色膨脹過程。

2 膨脹演示

在二值圖像的膨脹算法過程中我們使用二值圖像3x3圖像矩陣,由圖1可知,當(dāng)九個(gè)格子中只要出現(xiàn)一個(gè)‘0’,經(jīng)過膨脹算法后(x,y)點(diǎn)的值都會(huì)是‘0’。

只有(x,y)點(diǎn)以及相鄰的八個(gè)點(diǎn)都是‘1f(x,y)的值才是‘1’。這樣就完成了二值圖像的膨脹。

3 FPGA膨脹算法實(shí)現(xiàn)

3 二值圖像膨脹FPGA模塊架構(gòu)

3中我們使用串口傳圖傳入的是二值圖像。

FPGA源碼:

/*

Module name:  binary_image_swell.v

Description:  binary image swell.

*/

`timescale 1ns/1ps

module binary_image_swell(

input             clk, //pixel clk

input             rst_n,

input [15:0]      data_in,

input             data_in_en,

output  reg [15:0]    data_out,

output            data_out_en

);

wire [15:0] line0;

wire [15:0] line1;

wire [15:0] line2;

reg [15:0] line0_data0;

reg [15:0] line0_data1;

reg [15:0] line0_data2;

reg [15:0] line1_data0;

reg [15:0] line1_data1;

reg [15:0] line1_data2;

reg [15:0] line2_data0;

reg [15:0] line2_data1;

reg [15:0] line2_data2;

reg        data_out_en0;

reg        data_out_en1;

reg        data_out_en2;

line3x3 line3x3_inst(

.clken(data_in_en),

.clock(clk),

.shiftin(data_in),

.shiftout(),

.taps0x(line0),

.taps1x(line1),

.taps2x(line2)

);

//----------------------------------------------------------------------------

// Form an image matrix of three multiplied by three

//---------------------------------------------------------------------------

always @(posedge clk or negedge rst_n) begin

if(!rst_n) begin

line0_data0 <= 16'b0;

line0_data1 <= 16'b0;

line0_data2 <= 16'b0;

line1_data0 <= 16'b0;

line1_data1 <= 16'b0;

line1_data2 <= 16'b0;

line2_data0 <= 16'b0;

line2_data1 <= 16'b0;

line2_data2 <= 16'b0;

data_out_en0 <= 1'b0;

data_out_en1 <= 1'b0;

data_out_en2 <= 1'b0;

end

else if(data_in_en) begin

line0_data0 <= line0;

line0_data1 <= line0_data0;

line0_data2 <= line0_data1;

line1_data0 <= line1;

line1_data1 <= line1_data0;

line1_data2 <= line1_data1;

line2_data0 <= line2;

line2_data1 <= line2_data0;

line2_data2 <= line2_data1;

data_out_en0 <= data_in_en;

data_out_en1 <= data_out_en0;

data_out_en2 <= data_out_en1;

end

end

always @(posedge clk or negedge rst_n) begin

if(!rst_n)

data_out <= 16'h0000;

else if(data_out_en1)

if((line0_data0 == 16'h0000) && (line0_data1 == 16'h0000) && (line0_data2 == 16'h0000) && (line1_data0 == 16'h0000) && (line1_data1 == 16'h0000) && (line1_data2 == 16'h0000) && (line2_data0 == 16'h0000) && (line2_data1 == 16'h0000) && (line2_data2 == 16'h0000))

data_out <= line1_data1;

else if((line0_data0 == 16'hffff) && (line0_data1 == 16'hffff) && (line0_data2 == 16'hffff) && (line1_data0 == 16'hffff) && (line1_data1 == 16'hffff) && (line1_data2 == 16'hffff) && (line2_data0 == 16'hffff) && (line2_data1 == 16'hffff) && (line2_data2 == 16'hffff))

data_out <= line1_data1;

else

data_out <= 16'h0000;

end

endmodule

4實(shí)驗(yàn)結(jié)果

4 實(shí)驗(yàn)原圖

5 實(shí)驗(yàn)原圖顯示結(jié)果圖

6 膨脹后的結(jié)果圖

結(jié)果分析:

由圖5和圖6來看,明顯線條被加粗,膨脹算法實(shí)現(xiàn)。

至此,有興趣的同學(xué)可以使用FPGA開發(fā)板自己來實(shí)驗(yàn)一下下面這個(gè)過程,已達(dá)到自我的理解和貫通。

RGB圖像->sobel算子邊緣檢測(cè)->二值圖像的腐蝕->二值圖像的膨脹。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉