首页 > 技术 > 内容

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

时间:2026-01-26  作者:Diven  阅读:0

1 背景知识

图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边缘查找没有问题。

猜您喜欢


在选择通讯配件时,规格和尺寸是非常重要的因素。不同设备需要匹配相应的配件,确保其正常运作。例如,手机充电器的输出电压和电流必须与手机的要求相符,以避免损坏设备。...
2009-01-25 00:00:00
熔断器是重要的电气保护装置,主要用于防止电路过载和短路引起的设备损坏。根据不同的应用和特性,熔断器可以分为以下几类。根据结构形式,熔断器可以分为管式熔断器和刀式...
2009-05-06 00:00:00
在现代社会,安保设备的种类繁多,能够有效提升安全防护水平。视频监控系统是最常见的安保设备,包括摄像头、录像机和监视器,能够实时监控并记录重要场所的动态。入侵报警...
2020-07-24 00:00:00
贴片电阻上小小的字母数字组合,究竟代表什么阻值?E-96贴片电阻字母代码对照表就是你快速解码的利器! E-96系列电阻拥有更精细的阻值划分,共96个值,方便工程...
2025-04-14 15:02:00
近年来,国内贴片电阻品牌在技术和品质上取得了显著进步,成为越来越多电子产品制造商的首选。选择国产品牌贴片电阻,不仅能够享受到更具竞争力的价格优势,还能获得更便捷...
2024-11-26 11:30:11
电子元器件测试领域,阻抗分析仪作为高精度的测量工具,应用于电容、电感、电阻等元件的参数检测。尤其是在测量电容时,阻抗分析仪凭借其频率范围宽、测量精度高等优势,成...
2025-11-29 13:30:09
锂离子超级电容器是新型储能设备。结合了电池和电容器的优点。能量密度高,充放电速度快。应用于电动车和可再生能源。本文将介绍锂离子超级电容器的特点与优势。工作原理锂...
2025-03-26 04:30:35
因其稳定的性能和的应用而受到众多电子工程师和制造商的青睐。本文将全面介绍金凤冠排阻的大小规格及其主要品牌,帮助读者更好地了解和选购适合的产品。1. 金凤冠排阻概...
2018-02-04 13:06:30
插件电阻作为电子元器件中的基础组件,其性能和规格的多样化愈发重要。奥斯特(OST)作为知名的插件电阻品牌,稳定的质量和丰富的规格,赢得了的市场认可。本文将详细介...
2024-08-25 06:17:00
了解PLC、选型基础知识、软件安装、PLC连接电脑和上传下载程序都是PLC编程入门的最基础的知识。那么今天就讲基础之一,PLC如何连接电脑?如何将编程好的程序写...
2019-07-10 17:45:00