1 //矩阵元素移位赋值 2 always @(posedge clk or negedge rst_n)begin 3 if(rst_n==1'b0)begin 4 {p_11,p_12,p_13} <= {5'b0,5'b0,5'b0} ; 5 {p_21,p_22,p_23} <= {15'b0,15'b0,15'b0}; 6 {p_31,p_32,p_33} <= {15'b0,15'b0,15'b0}; 7 end 8 else begin 9 if(per_href_ff0==1&&flag_do==1)begin 10 {p_11,p_12,p_13}<={p_12,p_13,row_1}; 11 {p_21,p_22,p_23}<={p_22,p_23,row_2}; 12 {p_31,p_32,p_33}<={p_32,p_33,row_3}; 13 end 14 else begin 15 {p_11,p_12,p_13}<={5'b0,5'b0,5'b0}; 16 {p_21,p_22,p_23}<={5'b0,5'b0,5'b0} 17 {p_31,p_32,p_33}<={5'b0,5'b0,5'b0} 18 end 19 end 20 end 21 22 23 always @(posedge clk or negedge rst_n)begin 24 if(rst_n==1'b0)begin 25 mean_value_add1<=0; 26 mean_value_add2<=0; 27 mean_value_add3<=0; 28 end 29 else if(per_href_ff1)begin 30 mean_value_add1<=p_11+p_12+p_13; 31 mean_value_add2<=p_21+ 0 +p_23; 32 mean_value_add3<=p_31+p_32+p_33; 33 end 34 end 35 36 wire [8:0]mean_value;//8位数之和 37 wire [5:0]fin_y_data; //平均数,除以8,相当于左移三位。 38 39 assign mean_value=mean_value_add1+mean_value_add2+mean_value_add3; 40 assign fin_y_data=mean_value[8:3];View Code 3)sobel算子 | -1 0 +1 |
// | -1 0 +1 | //Gx= | -2 0 +2 | // | -1 0 +1 | // // | -1 -2 -1 | //Gy= | 0 0 0 | // | +1 +2 +1 | reg [8:0] p_x_data ,p_y_data ; // x 和 y 的正值之和 reg [8:0] n_x_data ,n_y_data ; // x 和 y 的负值之和 reg [8:0] gx_data ,gy_data ; //最终结果 always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin p_x_data <=0; n_x_data <=0; gx_data <=0; end else if(per_href_ff1==1) begin p_x_data <= p_13 + (p_23<<1) + p_33 ; n_x_data <= p_11 + (p_12<<1 )+ p_13 ; gx_data <= (p_x_data >=n_x_data)? p_x_data - n_x_data : n_x_data - p_x_data ; end else begin p_x_data<=0; n_x_data<=0; gx_data <=0; end end always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin p_y_data <=0; n_y_data <=0; gy_data <=0; end else if(per_href_ff1==1) begin p_y_data <= p_11 + (p_12<<1) + p_13 ; n_y_data <= p_31 + (p_32<<1) + p_33 ; gy_data <= (p_y_data >=n_y_data)? p_y_data - n_y_data : n_y_data - p_y_data ; end else begin p_y_data <=0; n_y_data <=0; gy_data <=0; end end //求平方和,调用ip核开平方 reg [16:0] gxy; // Gx 与 Gy 的平方和 always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin gxy<=0; end else begin gxy<= gy_data* gy_data + gx_data* gx_data ; end end wire [8:0] squart_out ; altsquart u1_altsquart ( //例化开平方的ip核 .radical (gxy), .q (squart_out), //输出的结果 .remainder() ); //与阈值进行比较 reg [15:0] post_y_data_r; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin post_y_data_r<=16'h00; end else if(squart_out>=threshold) post_y_data_r<=16'h00 ; else post_y_data_r<=16'hffff ; endView Code 5.非线性滤波器 非线性滤波器通常下是没有特定的转移函数,统计排序滤波器;
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !