Laplace 算子介绍
Laplace 算子和 Sobel 算子一样,属于空间锐化滤波操作。
拉普拉斯算子是一种重要的图像增强算子,它是一种各向同性滤波器,即滤波器的响应与滤波器作用图像的突变方向无关,而且实现简单,被广泛用于图像锐化和高频增强等算法中。
分别对Laplace算子x,y两个方向的二阶导数进行差分就得到了离散函数的Laplace算子。
Laplace 算子数学定义
在一个二维函数 f(x,y) 中,x,y 两个方向的二阶差分分别为,
![9321f1cee794f67a7431ec94c85a7585.png](https://i-blog.csdnimg.cn/blog_migrate/2e6f9990e45d44acad00694f2a9f0afc.png)
所以Laplace算子的差分形式为,
![4094bdea92f6dc27bc988bba50c5811f.png](https://i-blog.csdnimg.cn/blog_migrate/cfa21f23e585c2da10d092e36b7a1589.png)
0 | 1 | 0 |
---|---|---|
1 | -4 | 1 |
0 | 1 | 0 |
Laplace 算子改进
注意该 mask 的特点,mask 在上下左右四个 90 度的方向上结果相同,也就是说在 90 度方向上无方向性。为了让该 mask 在 45 度的方向上也具有该性质,对该 filter mask 进行扩展定义为,
1 | 1 | 1 |
---|---|---|
1 | -8 | 1 |
1 | 1 | 1 |
如同本文开始时说的那样,将 Laplace 算子写成 filter mask 后,其操作大同小异于其他的空间滤波操作。将 filter mask 在原图上逐行移动,然后mask中数值与其重合的像素相乘后求和,赋给与 mask 中心重合的像素,对图像的第一,和最后的行和列无法做上述操作的像素赋值零,就得到了拉普拉斯操作结果。
FPGA 实现
下面给出了关键代码实现
//pixel add calculate
always @ (posedge clk) begin
if(pixel_en_d3)begin
data_sum <=(A11+ A12 + A13 +A21+A23+A31+A32+A33) ;
end
add_en<=pixel_en_d3;
end
always @ (posedge clk) begin
if(add_en)begin
if(data_sum[0+:(PIXELS_BITS+3)]>{A22[0+:(PIXELS_BITS)],3'b0})
o_data<=data_sum[0+:(PIXELS_BITS+3)]-{A22[0+:(PIXELS_BITS)],3'b0};
else
o_data<={A22[0+:(PIXELS_BITS)],3'b0}-data_sum[0+:(PIXELS_BITS+3)];
end
valid <= add_en;
end
详细工程可以后台回复【Laplace 算子】即可获得,如何在工程中添加,可以参考小编写的《视频处理之Sobel【附源码】
》
参考链接
https://blog.csdn.net/hellocsz/article/details/102485387
https://blog.csdn.net/Loney_Island/article/details/80966909
![98677aeaf38fe7e5bd3329518ee485b0.png](https://i-blog.csdnimg.cn/blog_migrate/16b3854e25b79b4c9143eef115ac0456.jpeg)
深耕在FPGA 扎根于视频领域
卓越于神经网络