新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2019-10-30
- 在线时间
- 14 小时
|
1金钱
看了好两三天了,还是懵懵的,问题如下
这个模块里, 垂直投影 和 垂直投影边界 有啥区别?
垂直投影的时候得到的不应该是上下边界么,怎么叫 col_border_addr_wr 呢?
垂直投影的时,应该首先检测到像素从1到0变化(从白色背景到黑字),此时应该可以确定是上边界,不应该是row_border_addr_wr + 1么,怎么是col_border_addr_wr <= col_border_addr_wr + 1'b1?
还有这句,真的看不懂col_border_data_wr <= h_raddr - 2'd2; //RAM的列读地址—2赋给列边界写数据????
请大家看懂的话还请教一下
st_process:begin
if(h_raddr == H_PIXEL) //从u_h_myram里读完一行的列黑白数据,投影就完成了?
project_done_flag <= 1'b1;
else begin
cnt <= 'd0;
h_raddr <= h_raddr + 1'b1; //从u_v_myram里读一行的行黑白数据
v_raddr <= (v_raddr == V_PIXEL) ? v_raddr : (v_raddr + 1'b1);
project_done_flag <= 1'b0;
end
if(h_rise) begin //列像素从0到1变化(从黑字到白色背景变化)
num_col_t <= num_col_t + 1'b1; //列数+1
col_border_addr_wr <= col_border_addr_wr + 1'b1;//垂直投影边界写地址+1
col_border_data_wr <= h_raddr - 2'd2; //RAM的列读地址—2赋给列边界写数据 ????
col_border_ram_we <= 1'b1; //垂直投影边界ram写使能
end
else if(h_fall) begin //像素从1到0变化(从白色背景到黑字变化)
col_border_addr_wr <= col_border_addr_wr + 1'b1; //垂直投影边界写地址+1(col_border_addr_wr[0]=1时,存放的是右列边界)
col_border_data_wr <= h_raddr + 2'd2; //RAM的列读地址+2 赋给列边界写数据 ????
col_border_ram_we <= 1'b1; //写使能
end
else
col_border_ram_we <= 1'b0; //若列像素无变化则不写
if(v_rise) begin
num_row_t <= num_row_t + 1'b1;
row_border_addr_wr <= row_border_addr_wr + 1'b1;
row_border_data_wr <= v_raddr - 2'd2;
row_border_ram_we <= 1'b1;
end
else if(v_fall) begin
row_border_addr_wr <= row_border_addr_wr + 1'b1;
row_border_data_wr <= v_raddr + 2'd2;
row_border_ram_we <= 1'b1;
end
else
row_border_ram_we <= 1'b0;
end
|
最佳答案
查看完整内容[请看2#楼]
投影分为水平投影和垂直投影,垂直投影区分的是左右边界,水平投影区分的是上下边界,至于h_raddr对应的是此时边界的坐标,加减2是为了后面特征识别模块画边界线时不是那么紧贴数字,这里你可以改成其他数值
|