trustintruth · 2020年06月15日

FPGA奈克斯特——Sobel边缘检测

在图像处理中,边缘是一幅图像中最基本的特征,每幅图像的边缘包含了用于识别的有用信息,是图像分析和模式识别的主要特征提取手段。
作者:Trustintruth
来源: https://zhuanlan.zhihu.com/p/101227585

在模式识别或进行其他的中,在很多方法来识别,其中一种方法就是识别出来图像边缘。在图像中,一幅图像的“临界”表示为图像上亮度显著变化的地方,边缘指的是一个区域的结束,也是另一个区域的开始。“边缘点”指的是图像中具有坐标[x,y],且处在强度显著变化的位置上的点。常用的边缘检测算法大多是以原始图像灰度值为基础,通过考察图像的每个像素的某个邻域内 灰度的变化,利用边缘一阶或二阶导数的规律来检测边缘。下图左边为原始的黑白灰度的图像,通过边缘检测算法后变成了右边的图像。
615.jpg

sobel 是一个梯度的计算,如下图所示,是 x 和 y 方向的 3x3 窗口的卷积。

使用算式

来计算目标点的卷积值:

这里注意一定是绝对值,要大于0.

计算完成以后,要进行简单的二值化处理,将 sobel 值和阈值对比,产生黑白的二值化图像。 将大于阈值设置为与背景色相反的图像。

代码如下:
module sobel (
    input                       rst,
    input                       pclk,
    input[7:0]                  threshold,
    input                       de,
    input[7:0]                  data_in,
    output reg[7:0]             data_out
);
reg[7:0] p11,p12,p13;
reg[7:0] p21,p22,p23;
reg[7:0] p31,p32,p33;
wire[7:0] p1,p2,p3;
reg[9:0] x1,x3;
reg[9:0] y1,y3;
reg[9:0] abs_x,abs_y;
reg[10:0] abs_g;
linebuffer_Wapper#
(
    .no_of_lines(3),
    .samples_per_line(1024),
    .data_width(8)
)
 linebuffer_Wapper_m0(
    .ce         (1'b1   ),
    .wr_clk     (pclk   ),
    .wr_en      (de   ),
    .wr_rst     (rst   ),
    .data_in    (data_in),
    .rd_en      (de   ),
    .rd_clk     (pclk   ),
    .rd_rst     (rst   ),
    .data_out   ({p3,p2,p1}  )
   );
always@(posedge pclk)
begin
    p11 <= p1;
    p21 <= p2;
    p31 <= p3;
    
    p12 <= p11;
    p22 <= p21;
    p32 <= p31;
    
    p13 <= p12;
    p23 <= p22;
    p33 <= p32;
end

always@(posedge pclk)
begin
    x1 <= {2'b00,p11} + {2'b00,p31} + {1'b0,p21,1'b0};
    x3 <= {2'b00,p13} + {2'b00,p33} + {1'b0,p23,1'b0};
    
    y1 <= {2'b00,p11} + {2'b00,p13} + {1'b0,p12,1'b0};
    y3 <= {2'b00,p31} + {2'b00,p33} + {1'b0,p32,1'b0};
end

always@(posedge pclk)
begin
    abs_x <= (x1 > x3) ? x1 - x3 : x3 - x1;
    abs_y <= (y1 > y3) ? y1 - y3 : y3 - y1;
    abs_g <= abs_x + abs_y;
end

always@(posedge pclk)
begin
    data_out <= (abs_g > threshold) ? 8'h00 : 8'hff;
end

endmodule

代码已上传至公共号,获取更多代码与资料,欢迎关注我啊!

推荐阅读

关注此系列,请关注专栏FPGA的逻辑
推荐阅读
关注数
10614
内容数
577
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息