二值图像 FPGA腐蚀算法解析

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

1 背景知识

二值图像(Binary Image)是指将图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。二值图像是指在图像中,灰度等级只有两种,也就是说,图像中的任何像素不是0就是1,再无其过渡的灰度值。
腐蚀和膨胀是形态学处理的基础,许多形态学算法都是以这两种操作作为基础的。

二值图像 FPGA腐蚀算法解析

图1 使用腐蚀去除图像中的部件

图1 a一幅大小为486x486的连线模板二值图像,图1b~d分别使用11x11,15X15和45X45的模板进行腐蚀。我们从这个例子看到,腐蚀缩小或细化了二值图像中的物体。事实上,我们可以将腐蚀看成是形态学滤波操作,这种操作将小于模板的图像细节从图像中滤除。

2 腐蚀算法

使用白色腐蚀:

图2 腐蚀演示

在二值图像的腐蚀算法过程中我们使用二值图像3x3图像矩阵,由图2可知,当九个格子中不全为‘0’或者‘1’时,经过腐蚀算法后九个格子的值最终都会变成‘1’;如果九个全是‘1’或者‘0’时,那么最终的结果九个全是‘1’或者‘0’。

3 FPGA腐蚀算法实现

图3 二值图像腐蚀FPGA模块架构

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

FPGA源码:

`timescale 1ns/1ps

Module binary_image_etch(

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 《= 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’hffff;

end

endmodule

4实验结果

图4 实验原图

图5 原图显示


 

图6 腐蚀后的结果

结果分析:
    图5和图6进行对比,图5中最细的图案在图6中已经消失,比较粗的线条也相对变细,实验成功。如果大家想进行更大力度的腐蚀可以使用更大的模板。

猜您喜欢

量筒是常见的实验室工具,主要用于测量液体体积。根据不同的用途和设计,量筒可以分为几种主要类型。标准量筒是实验室中最常用的类型,通常由透明塑料或玻璃制成,刻度清晰...
2016-07-09 00:00:00

实验室设备在科学研究和技术开发中是非常重要的配件,其主要优势体现在以下几个方面。实验室设备能够提高实验的精确性和可靠性。高性能的仪器能够提供准确的数据,减少人为...
2008-05-31 00:00:00

三星(Samsung)作为全球知名的电子品牌,其插件电阻产品因质量稳定、性能优良而受到关注。插件电阻作为电子电路中的重要组成部分,其大小规格和品牌选择直接影响电...
2012-01-12 00:12:30

数字电位器是应用于电子设备中的可编程元件,其主要作用是调节电流和电压。根据不同的工作原理和应用场景,数字电位器可以分为以下几类。按照控制方式分类,数字电位器可分...
2011-03-04 00:00:00

三角锉是常见的手工工具,应用于金属加工、木工和修整工作中。规格尺寸因用途和制造标准而异,通常分为不同的型号。三角锉的长度通常在150毫米到300毫米之间,最常见...
2021-08-01 00:00:00

随着智能手机、笔记本电脑等便携式电子设备的普及,锂电池已经成为我们生活中重要的一部分。为了确保安全和延长电池寿命,了解正确的室内锂电池充电方法很重要。室内锂电池...
2024-05-30 00:00:00

闸阀是重要的工业阀门,应用于各个领域。在石油和天然气行业,闸阀用于控制液体和气体的流动,确保管道系统的安全与稳定。在化工行业,闸阀能够有效地抵御腐蚀和高温,适用...
2022-01-05 00:00:00

采样电阻作为关键的测量和控制元件,应用于电流检测、电压采样等领域。肇庆作为中国重要的电子制造基地,拥有众多采样电阻生产企业和品牌。本文将围绕“肇庆英达采样电阻类...
2013-12-25 12:16:04

电池充电管理芯片,顾名思义,是专门为电池充电而设计的芯片。就像一位经验丰富的管家,负责控制和管理整个充电过程,确保电池能够安全、高效地充满电,并延长电池的使用寿...
2024-07-11 00:00:00

前言现场可编程门阵列(FPGA)是近几年来出现并被广泛应用的大规模集成电路器件,它的特点是直接面向用户,具有极大的灵活性和通用性使用方便,硬件测试和实现快捷,...
2020-01-30 17:02:00