FPGA图像处理基础~sobel算子

sobel的由来是求导公式即:

        f'(x) = lim(h→0)[f(x+h)-f(x-h)]/2h,

        通过高等数学的知识易得,这个公式可以通过求微分来取得数值变化的大小。

        而要对图像使用的情况下由于求极限也只能趋于1,则取近似为f'(x) = [f(x+1)-f(x-1)]/2,通常sobel核的范围是3x3,而其中的中间需要加权一倍。

        整体呈现:(来自百度百科)

 verilog实现方法:

    always@(posedge Sys_clk or negedge Rst_n) begin
        if(!Rst_n) begin
            kernel_1  <= 'd0;            
            kernel_2  <= 'd0;
            kernel_3  <= 'd0;            
        end else if(flag_kernel) begin
            kernel_1  <= { kernel_1 , data_receive }; 
            kernel_2  <= { kernel_2 , RD_DATA_OUT_2};
            kernel_3  <= { kernel_3 , RD_DATA_OUT_1}; 
        end
    end
    always@(posedge Sys_clk or negedge Rst_n) begin
        if(!Rst_n) begin
            dx <= 'd0;
            dy <= 'd0;
        end else if(flag_Conv == 1'b1) begin
            dx <=   (kernel_1[15:8] - data_receive) 
                 + ((kernel_2[15:8] - RD_DATA_OUT_2)<<1)
                 +  (kernel_3[15:8] - RD_DATA_OUT_1);
            dy <=   (RD_DATA_OUT_1 - data_receive) 
                 + ((kernel_3[ 7:0] - kernel_1[7:0])<<1)
                 +  (kernel_3[15:8] - kernel_1[15:8]);
        end else begin
            dx <= dx;
            dy <= dy;
        end
    end

你可能感兴趣的:(图像处理,人工智能)