FPGA二值图像边界提取算法实现

时间:2025-11-01  作者:Diven  阅读:0

1 背景知识

FPGA二值图像边界提取算法实现

图1 二值图像边界提取演示

如图1 所示,图1 a为一幅简单的二值图像,经过边界提取后形成如图1 b 所示的图像,显示出了白色区域的轮廓。

2 边界提取算法

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

图2 二值图像边界提取演示

我们使用3x3模板进行边界提取,所以当3x3九个点都是‘1’的时候,输出为‘1’,当九个点都是‘0’的时候,输出为‘1’,其情况输出均为‘0’。

3 FPGA二值图像边界提取算法实现

图2 二值图像膨胀FPGA模块架构

图2中我们使用串口传图传入的是二值图像。

FPGA源码:

`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实验结果

图5 实验原图1

图6实验原图2

图7 实验结果图1

图8 实验结果图2

结果分析:图5和图7对比,比较粗的线都被查找出了边缘,只有最细的那条没有被提取出来,并且被加粗,原因是最细的线条只有三个像素当查找出边缘后显示为黑色,两边黑色连在一起所以线条就变粗了。图6和图8边缘查找没有问题。

猜您喜欢

仪表在现代工业和日常生活中是重要配件,根据功能和应用的不同,仪表可以分为多种类别。测量仪表是最常见的分类,包括温度计、压力表和流量计等。这些仪表用于测量物理量,...
2015-09-02 00:00:00

PTC热敏电阻作为重要的电子元器件,因其自恢复过流保护和温度控制功能被应用于家电、通讯、电源等领域。华润电阻作为国内知名的电子元器件制造商,其PTC热敏电阻产品...
2019-06-07 21:59:14

排阻是常见且重要的元件,应用于各种电路设计中。SUPEROHM(美隆)作为知名的排阻品牌,高品质的产品性能和多样化的封装参数,赢得了广大电子工程师和制造厂商的青...
2013-01-09 06:20:14

真空打包机是用于食品保鲜和包装的设备,通过抽取包装袋内的空气,形成真空环境,从而有效延长食品的保质期。该设备应用于家庭、餐饮业及食品加工行业,能够防止氧化、潮湿...
2012-07-15 00:00:00

雪崩二极管(Avalanche Diode)是特殊类型的半导体器件,应用于高频、高电压和高功率的电子电路中。工作原理基于雪崩击穿效应,能够在特定的条件下实现快速...
2025-03-30 10:00:34

贴片电阻2010是一种表面贴装型电阻器,因其尺寸为2.0mm x 1.0mm而得名。别看身材小巧,却拥有比一般贴片电阻更大的功率,通常可达0.25W甚至更高,这...
2024-11-29 10:25:32

直插瓷片电容是应用于电子设备中的被动元件,其参数直接影响电路的性能。电容值是最重要的参数,通常以微法(μF)或皮法(pF)为单位,决定了电容器储存电荷的能力。额...
2010-03-06 00:00:00

技术前沿:AI ISP摄像头芯片(安防、会议、车载)视频监控芯片具备高度的系统复杂性和专业性。视频监控芯片的研发需要掌握的核心技术包括ISP技术、AI处理器技...
2023-08-15 09:50:00


排阻作为常见的电阻器件,因其在电路中的独特作用而受到关注。格莱尔(GLE)作为知名的排阻品牌,优异的品质和丰富的参数选项,赢得了众多电子工程师和制造商的青睐。本...
2012-10-06 04:43:39