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,再無其他過渡的灰度值。

二值圖像的邊界提取主要基于黑白區(qū)域的邊界查找。和許多邊界查找算法相比它適合于二值圖像。

1 二值圖像邊界提取演示

如圖1 所示,圖1 a為一幅簡(jiǎn)單的二值圖像,經(jīng)過邊界提取后形成如圖1 b 所示的圖像,顯示出了白色區(qū)域的輪廓。

2 邊界提取算法

使用黑色提取,背景為白色,1’表示白色,‘0’表示黑色。

2 二值圖像邊界提取演示

我們使用3x3模板進(jìn)行邊界提取,所以當(dāng)3x3九個(gè)點(diǎn)都是‘1’的時(shí)候,輸出為‘1’,當(dāng)九個(gè)點(diǎn)都是‘0’的時(shí)候,輸出為‘1’,其他情況輸出均為‘0’。

3 FPGA二值圖像邊界提取算法實(shí)現(xiàn)

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

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

FPGA源碼:

/*

Module name:  boundary_extraction.v

Description:  binary image boundary extraction

*/

`timescale 1ns/1ps

module boundary_extraction(

input             clk, //pixel clk

input             rst_n,

input             hs_in,

input             vs_in,

input [15:0]      data_in,

input             data_in_en,

output            hs_out,

output            vs_out,

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;

reg        hs_r0;

reg        hs_r1;

reg        hs_r2;

reg        vs_r0;

reg        vs_r1;

reg        vs_r2;

wire[18:0]  result_data;

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;

hs_r0 <= 1'b0;

hs_r1 <= 1'b0;

hs_r2 <= 1'b0;

vs_r0 <= 1'b0;

vs_r1 <= 1'b0;

vs_r2 <= 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;

hs_r0 <= hs_in;

hs_r1 <= hs_r0;

hs_r2 <= hs_r1;

vs_r0 <= vs_in;

vs_r1 <= vs_r0;

vs_r2 <= vs_r1;

end

end

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

// line0_data0   line0_data1   line0_data2

// line1_data0   line1_data1   line1_data2

// line2_data0   line2_data1   line2_data2

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

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 <= 16'hffff;

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 <= 16'hffff;

else

data_out <= 16'h0000;

end

endmodule

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

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

5實(shí)驗(yàn)原圖2

6 實(shí)驗(yàn)結(jié)果圖1

7 實(shí)驗(yàn)結(jié)果圖2

結(jié)果分析:圖4和圖6對(duì)比,比較粗的線都被查找出了邊緣,只有最細(xì)的那條沒有被提取出來,并且被加粗,原因是最細(xì)的線條只有三個(gè)像素當(dāng)查找出邊緣后顯示為黑色,兩邊黑色連在一起所以線條就變粗了。圖5和圖7邊緣查找沒有問題。


本站聲明: 本文章由作者或相關(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)閉