项目简述
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。图像的腐蚀与膨胀在图像处理中是非常常见的操作。本次项目的简述是:PC机通过千兆网发送一幅图片经过膨胀或腐蚀之后转存到DDR3中,然后经过USB3.0发送到上位机显示。
本次实验所用到的软硬件环境如下:
1、VIVADO2019.1软件环境
2、Modelsim10.7c仿真环境
3.米联客MA7035FA(100T)开发板
4、米联客USB3.0上位机软件
腐蚀膨胀原理
根据演示, 背景为白色, 即为 1。 0 为图像。
在此种情况下, 可采取 9 个元素相与的操作。
在此种情况下, 可采取 9 个元素相或的操作。
从上面我们可以看出,如果背景与图像的颜色互换,那么只需要将图像膨胀与腐蚀的与或运算相互颠倒即可。注意这种方法只适应于二值图像,膨胀和腐蚀, 都是针对于二值图像而言。
图像腐蚀代码
从前面图像腐蚀的原理部分,我们可以发现图像腐蚀的关键还是构建3*3的矩阵,但是我们前面图像处理的文章已经进行了讲解,所以这里不再进行赘述。因为图像的与或操作在我们8位的图像中难以实施,所以我们将与或操作变成了加操作,具体的可以观看如下代码:
`timescale 1ns / 1ps
// *********************************************************************************
// Project Name : OSXXXX
// Author : zhangningning
// Email : nnzhang1996@foxmail.com
// Website :
// Module Name : sobel.v
// Create Time : 2020-04-08 08:32:02
// Editor : sublime text3, tab size (4)
// CopyRight(c) : All Rights Reserved
//
// *********************************************************************************
// Modification History:
// Date By Version Change Description
// -----------------------------------------------------------------------
// XXXX zhangningning 1.0 Original
//
// *********************************************************************************
module sobel(
//System Interfaces
input sclk ,
input rst_n ,
//Communication Interfaces
input [ 7:0] rx_data ,
input pi_flag ,
output reg [ 7:0] tx_data ,
output reg po_flag
);
//========================================================================================\
//**************Define Parameter and Internal Signals**********************************
//========================================================================================/
parameter COL_NUM = 1024 ;
parameter ROW_NUM = 768 ;
parameter VALUE = 80 ;
wire [ 7:0] mat_row1 ;
wire [ 7:0] mat_row2 ;
wire [ 7:0] mat_row3 ;
wire mat_flag ;
reg [ 7:0] mat_row1_1 ;
reg [ 7:0] mat_row2_1 ;
reg [ 7:0] mat_row3_1 ;
reg [ 7:0] mat_row1_2 ;
reg [ 7:0] mat_row2_2 ;
reg [ 7:0] mat_row3_2 ;
reg mat_flag_1 ;
reg mat_flag_2 ;
reg mat_flag_3 ;
reg mat_flag_4 ;
reg mat_flag_5 ;
reg mat_flag_6 ;
reg mat_flag_7 ;
reg mat_row1_flag ;
reg mat_row2_flag ;
reg mat_row3_flag ;
reg mat_row1_1_flag ;
reg mat_row2_1_flag ;
reg mat_row3_1_flag ;
reg mat_row1_2_flag ;
reg mat_row2_2_flag ;
reg mat_row3_2_flag ;
//========================================================================================\
//************** Main Code **********************************
//========================================================================================/
always @(posedge sclk)
begin
mat_row1_1 <= mat_row1;
mat_row2_1 <= mat_row2;
mat_row3_1 <= mat_row3;
mat_row1_2 <= mat_row1_1;
mat_row2_2 <= mat_row2_1;
mat_row3_2 <= mat_row3_1;
end
always @(posedge sclk)
begin
mat_flag_1 <= mat_flag;
mat_flag_2 <= mat_flag_1;
mat_flag_3 <= mat_flag_2;
mat_flag_4