前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像分割(四)

图像分割(四)

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

图像分割(四)

之基于FPGA的局部自适应分割

子模块设计

窗口缓存模块win_buf

本模块不做任何算法上的处理,只是负责将当前输入像素的二维窗口元素缓存并组成一个一维的向量输出。

模块的构建非常简单,对图像分别做行列方向的延迟即可。对于行方向上的延迟,可以用行缓存来实现,对于列方向上的延迟,则采用寄存器实现。

设定需要缓存的窗口尺寸为KSZ,则需要KSZ-1行缓存,以及KSZxKSZ个寄存器来实现。以7x7窗口缓存快为例:

代码语言:js
复制
`timescale 1ns / 1ps
module win_buf(
rst_n,
clk,
din_valid,
din,
dout,
dout_valid,
dout_org,
vsync,
vsync_out,
is_boarder
 );
parameter DW =14;
parameter KSZ = 15;
parameter IH = 512;
parameter IW =640;
input rst_n;
input clk;
input din_valid;
input vsync;
input [DW-1:0] din;
output [DW*KSZ*KSZ-1:0] dout; //输出为KSZ*KSZ向量
output [DW-1:0] dout_org; //输出中心点像素
output vsync_out;
output is_boarder;
output dout_valid;
localparam num_all = KSZ*KSZ;//窗口数据总数
//窗口寄存器
reg [DW-1:0] p [0:num_all-1];
//例化KSZ-1个行缓存
generate
begin : line_buf
genvar i;
for(i=0;i<=KSZ-2;i=i+1)
begin
line_buffer line_buf_inst (
 .clk(clk), 
 .rst(rst_n), 
 .din(line_din[i][DW-1:0]), 
 .wr_en(line_wren[i]), 
 .rd_en(line_rden[i]), 
 .dout(line_din[i][DW-1:0]), 
 .full(line_full[i]), 
 .empty(line_empty[i]) 
);
end
end
endgenerate
//将输入接入延时电路
always @(posedge clk)
begin
if(valid)
p[0] <= din;
//列延迟电路
for(k=0;k<=KSZ-1;k=k+1)
for(j=1;j<=KSZ-1;j=j+1)
if(line_valid[k*KSZ+j-1])
p[k*KSZ+j] <= p[k*KSZ+j-1];
//行延迟电路
for(k=1;k<=KSZ-1;k=k+1)
if(line_rden[k-1])
p[k*KSZ] <= line_dout[k-1];
end
//输出窗口缓存
generate
begin : xhdl2
genvar i;
for(i=1;i<=num_all;i=i+1)
begin : out_data_gen
assign dout[i*DW -1 :(i-1)*DW] = p[i-1];
end
end
endgenerate
//输出中心像素
assign dout_org = p[med_idx];
endmodule
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图像分割(四)
  • 之基于FPGA的局部自适应分割
  • 子模块设计
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档