一、二值图像

二值图像(Binary Image)是指图像上的每一个像素只有两种可能的取值或灰度等级状态。简言之,在图像中灰度等级只有两种0或255(黑或白).

二、形态学

形态学,即数学形态学(Mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,如边界和连通区域等,便于后续图像识别等工作。

常用场景:边缘检测,孔洞填充,纹理分析、形态骨架提取、形状识别、图像分割、角点提取,图像恢复与重建、图像压缩等。

基本的算法膨胀腐蚀,开操作,闭操作;

先腐蚀后膨胀的过程称为开运算。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。
先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。

实现方式:在图像中移动一个结构元素(滤波窗口),后将结构元素与下面的二值图像进行交并等集合运算。因此这种二值形态算法可转换成集合的逻辑运算,简单且适用于并行处理,本文则采用硬件FPGA实现。

三、腐蚀膨胀

对于腐蚀膨胀,输入图像必须是二值图像,通过腐蚀膨胀运算可实现多种功能,如:
(1)抑制噪声
(2)分割出独立元素
(3)连接相邻的元素
(4)寻找图像中明显的极大值和极小值区域
(5)求图像梯度

腐蚀膨胀的原理

1、腐蚀

腐蚀(Erode)是求局部最小值的操作,可消除边界点,使边界向内部收缩,从而消除小且无意义的物体。
以 3x3 模板为例,1 代表白色,0代表黑色。
腐蚀就是用该3*3窗口遍历二值图像上的每个像素,将窗口内的9个像素进行相与运算,结果为 1 则输出为 1,否则为0。

2、膨胀

膨胀(Dialate)是求局部最大值的操作,能将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程,从而填补物体中空洞。
膨胀即这 9 个像素相或。

注意:如果背景与图像的颜色互换(0表示白,1表示黑),那么只需要将图像膨胀与腐蚀的与或运算相互颠倒即可。

四、matlab实现腐蚀膨胀

clc;
clear all;
close all;RGB = imread('二值化图像.bmp');                %读图
[ROW,COL, DIM] = size(RGB);              %得到图像行列数
%------------------------------< Erode >-----------------------------------
Erode_img = zeros(ROW,COL);
for r = 2:ROW-1for c = 2:COL-1and1 = bitand(RGB(r-1, c-1), bitand(RGB(r-1, c), RGB(r-1, c+1)));and2 = bitand(RGB(  r, c-1), bitand(RGB(  r, c), RGB(  r, c+1)));and3 = bitand(RGB(r+1, c-1), bitand(RGB(r+1, c), RGB(r+1, c+1)));Erode_img(r, c) = bitand(and1, bitand(and2, and3));end
end
%------------------------------< Dilate >----------------------------------
Dilate_img = zeros(ROW,COL);
for r = 2:ROW-1for c = 2:COL-1or1 = bitor(RGB(r-1, c-1), bitor(RGB(r-1, c), RGB(r-1, c+1)));or2 = bitor(RGB(  r, c-1), bitor(RGB(  r, c), RGB(  r, c+1)));or3 = bitor(RGB(r+1, c-1), bitor(RGB(r+1, c), RGB(r+1, c+1)));Dilate_img(r, c) = bitor(or1, bitor(or2, or3));end
end
%------------------------------< show >------------------------------------
figure;         imshow(RGB);       title('原图');
subplot(2,2,1); imshow(Erode_img); title('腐蚀');
imwrite (Erode_img,'Erode_img.bmp');
subplot(2,2,2); imshow(Dilate_img);title('膨胀');
imwrite (Dilate_img,'Dilate_img.bmp');

五、FPGA实现腐蚀

二值化模块、3*3窗口生成模块、腐蚀模块

verilog实现二值化

module two(input            clk,input            rst_n,input   wire      iValid,input [7:0]  iData,output  reg out_Valid,output reg  [7:0]oData_two
);parameter THRESHOLD = 8'd150; //二值化的阈值always @ (posedge clk or negedge rst_n)if(!rst_n)oData_two <= 0;else if (iData > THRESHOLD)oData_two <= 8'd255;elseoData_two <= 0;always @ (posedge clk or negedge rst_n)if(!rst_n)out_Valid <= 0;else out_Valid <= iValid;
endmodule

verlog实现腐蚀

module Erode(input            clk,input            rst_n,input   wire        iValid                  ,input   [7:0]     filter_11,filter_12,filter_13, //生成的3*3窗口数据input   [7:0]     filter_21,filter_22,filter_23,input   [7:0]     filter_31,filter_32,filter_33,output             Erode_de    ,//de同步信号output  wire  [7:0]    Erode_data  );reg [1:0]           de_shift1 ;  reg  g1,g2,g3,g;//---------------------------------------------------
//                   腐蚀算法的流水并行运算
//---------------------------------------------------//clk1,进行所有行的与运算 , &&逻辑与always @ (posedge clk or negedge rst_n)if(!rst_n) beging1 <= 1'b0;g2 <= 1'b0;g3 <= 1'b0;endelse beging1 <= filter_11 && filter_12 && filter_13;g2 <= filter_21 && filter_22 && filter_23;g3 <= filter_31 && filter_32 && filter_33;end//clk2,每行与运算的结果再次与运算always @ (posedge clk or negedge rst_n)if(!rst_n) g <= 1'b0;else g <= g1 && g2 && g3;assign  Erode_data =  g ? 8'd255 : 8'd0;// 打拍做同步always @(posedge clk or  negedge rst_n) beginif(!rst_n)beginde_shift1   <=  2'b0;endelse beginde_shift1 <= {de_shift1[0], iValid};endendassign Erode_de   = de_shift1[1];endmodule

可看到此时窗口中九个像素进行相与操作, 下一个clk计算出g1,g2,g3,均为高电平,下一clk计算出g,为高电平,因此可输出255。同理g为低电平输出0。

六、FPGA实现膨胀

和腐蚀相同,不同在于是进行或运算,核心代码如下:

//clk1,进行所有行的或always @ (posedge clk or negedge rst_n)if(!rst_n) beging1 <= 1'b0;g2 <= 1'b0;g3 <= 1'b0;endelse beging1 <= filter_11 || filter_12 || filter_13;g2 <= filter_21 || filter_22 || filter_23;g3 <= filter_31 || filter_32 || filter_33;end//clk2,每行与运算的结果再次或运算always @ (posedge clk or negedge rst_n)if(!rst_n) g <= 1'b0;else g <= g1 || g2 || g3;assign  Erode_data =  g ? 8'd255 : 8'd0;

FPGA实现腐蚀膨胀的效果图如下:
左:腐蚀
右:膨胀

算法简化的技巧:若需要形态学滤波后进行阈值处理,我们即可先阈值处理,后二值化形态学滤波,这样就能减少运算以及硬件资源的消耗,同时缩短延迟。

七、先膨胀后腐蚀的RTL框图:

这里比较简单,就是上述模块之间的互相连接,代码不再赘述。

同样的,我们也可以先腐蚀后膨胀。
最终,将腐蚀、膨胀,先膨胀后腐蚀的FPGA实现效果进行对比:

FPGA实现图像二值形态学滤波——腐蚀膨胀相关推荐

  1. 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)

    9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 文章目录 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 1 算法原理 1.1 ...

  2. C语言二值图的腐蚀膨胀及开闭运算

    (M2C系列)C语言二值图的形态学腐蚀膨胀及开闭运算 一.结构元 二.腐蚀 三.膨胀 四.开闭运算 五.其他 by HPC_ZY 由于剧情,需要纯C(不用三方库)实现图像算法.但作为一名MATLAB老 ...

  3. 图像二值形态学——腐蚀和膨胀的C语言实现

    数学形态学是法国和德国科学家在研究岩石结构时建立的一门科学.形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态.在图像处理中的应用主要是:利用形态学的 ...

  4. 二值形态学操作、图像的边缘检测、图像编码

    实验五 二值形态学操作 一.实验目的  了解二值形态学的基本运算  掌握基本形态学运算的Matlab实现  了解形态操作的应用 二.原理     收缩和膨胀是数学形态学最基本的变换,数学形态学的 ...

  5. 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充

    9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...

  6. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

  7. opencv-python基础用法详细代码-图片加载-ROI-边缘滤波-二值化-轮廓提取-膨胀腐蚀等

    目录 1.1图像的导入和导出 1.2像素运算 1.3ROI与填充 1.4模糊与锐化操作 1.5边缘保留滤波 1.6图像二值化 1.7图像直方图 1.8绘制外轮廓 1.9对象测量 1.10区分指定外轮廓 ...

  8. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

    9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...

  9. 【FPGA教程案例42】图像案例2——通过verilog实现图像二值化处理,通过MATLAB进行辅助验证

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

最新文章

  1. 36氪研究 | 智慧零售行业研究报告
  2. 对数据库进行黑盒测试操作?
  3. Asp.net MVC中的ViewData与ViewBag
  4. 利用云功能和API监视Google表格中的Cloud Dataprep作业状态
  5. weblogic启动受管服务器报错Authentication for user weblogic denied (weblogic 11g 域账号密码不生效的解决方法)...
  6. 经典排序算法(Java版)
  7. e0312 不存在用户定义的_更加灵活的参数校验,Spring-boot自定义参数校验注解
  8. 【原】小程序常见问题整理
  9. 动态分配算法_【原创连载】算法素颜(第4篇):空间复杂度你真的懂了吗?
  10. L2-009. 抢红包
  11. MS UC 2013-2-Deploy Microsoft Exchange Server 2013-1-Prerequisites
  12. 2021-4月最全停词表(1893个),速取
  13. jqprint 分页打印_jQuery打印Html页面自动分页
  14. 【电脑插入U盘或者内存卡显示无法格式化FAT32如何解决】
  15. 旅行商问题 Traveling Salesman Problem(TSP)
  16. Vue开发实例(15)之动态路由
  17. 怎么做二维码更简单?这款二维码生成器了解一下
  18. 【CYH-02】NOIp考砸后虐题赛:转换式:题解
  19. 浅谈共享充电器电路板构造及充电原理
  20. 【windows10】使用pytorch版本deeplabv3+训练自己数据集

热门文章

  1. ps插件cutterman安装与使用
  2. “打死都千万不要进外包”,我在阿里外包测试的两年...
  3. 大数据在智能家居中的应用
  4. 乐max2 android9,乐视Max 2跑分曝光 硬件直逼Max pro
  5. JAVA练习 ——火车
  6. 【python】将python 编译为二进制可执行程序
  7. 西子奥的斯服务器显示dlf,西子奥的斯电梯驱动器故障代码
  8. 管道轴测图CAD画法
  9. PV操作 阅览室登记问题
  10. 【源码级】butterfly魔改