前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >形态学滤波(五)

形态学滤波(五)

作者头像
瓜大三哥
发布2018-02-26 11:35:50
5850
发布2018-02-26 11:35:50
举报
文章被收录于专栏:瓜大三哥

形态学滤波(五)

之一维形态学腐蚀/膨胀子模块设计

对于图像处理而言,是纵向和横向两个维度的处理。我们知道,对于任何二维的操作,都可以分解为一维方向的操作来简化来设计。在图像处理中,习惯是首先横向处理,然后纵向处理。所谓横向处理就是对每一行进行处理。对于尺寸nxn的处理窗口可以采用一个1xn的窗体从图像第一行第一列开始,自左向右滑动,依次取出窗口内的n个限售股灰度值,比较得到灰度最小值或者最大值并按顺序存储。

以处理窗口尺寸为5说明,要完成5个数据的比较,可以在一个时钟完成两对数据的比较,第二个时钟完成上述比较结果的比较,第三个时钟完成与最后一个数据的比较,整个电路的时间开销为比较的次数,即窗口尺寸/2+1,在资源上需要4个比较器来实现5个数据的比较,。如图所示:

将minmax模块输出的较小值接入下一级比较模块输入,得到的就是腐蚀操作,否则,就是膨胀操作。

代码语言:js
复制
`timescale 1ns / 1ps
module morph_1D(
rst_n,
clk,
din,
din_valid,
dout_valid,
dout
 );
parameter DW = 14;
parameter KSZ = 3;
parameter ERO_DIL = 1; //0 膨胀操作
 //1 腐蚀操作
input rst_n;
input clk;
input [DW-1:0] din;
input din_valid;
output [DW-1:0] dout;
output dout_valid;
localparam med_idx = (KSZ>>1);//处理半径尺寸
reg [KSZ - 1 : 0] din_valid_r; //输入有效缓存,用于时序对齐
reg [DW - 1 : 0] reg_din;//缓存数据
//中间比较结果寄存器 min max,对于窗口尺寸为5,则有4个中间寄存器
wire [DW - 1 : 0] min [0:KSZ-2];
wire [DW - 1 : 0] max [0:KSZ-2];
//缓存输入有效信号用于时序对齐
//缓存数据
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
din_valid_r <= {KSZ{1'b0}};
reg_din <= {DW{1'b0}};
end
else
begin
din_valid_r <= ({din_valid_r[KSZ - 2:0],din_valid});
reg_din <= din;
end
end
//调用第一个比较模块,比较前两拍数据
minmaxcmp_min_max(
.clk(clk),
.valid(din_valid_r[0]),
.din_a(reg_din),
.din_b(din),
.dout_min(min[0]), //前两拍的较小值
.dout_max(max[0]) //前两拍的较大值
);
//如果是腐蚀操作
generate
if(ERO_DIL)
begin : map2
begin : xdhl0
genvar i;
//例化剩余比较器,共KSZ-2个
for(i = 3; i <= KSZ; i = i + 1)
begin : gen_cmp_min
minmax cmp_min_inst(
.clk(clk),
.valid(din_valid_r[i-2]),
.din_a(min[i-3]),
.din_b(din),
.dout_min(min[i-2]), 
.dout_max(max[i-2]) 
);
end
end
assign dout  = min[KSZ-1]; //输出与最后一个比较器对齐
end
endgenerate
//如果是膨胀操作
generate
if(~ERO_DIL)
begin : map3
begin : xdhl1
genvar i;
//例化剩余比较器,共KSZ-2个
for(i = 3; i <= KSZ; i = i + 1)
begin : gen_cmp_max
minmax cmp_max_inst(
.clk(clk),
.valid(din_valid_r[i-2]),
.din_a(max[i-3]),
.din_b(din),
.dout_min(min[i-2]), 
.dout_max(max[i-2]) 
);
end
end
assign dout  = max[KSZ-1]; //输出与最后一个比较器对齐
end
endgenerate
assign dout_valid = din_valid_r[KSZ-1-med_idx];
endmodule
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 形态学滤波(五)
  • 之一维形态学腐蚀/膨胀子模块设计
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档