我用java实现的图像边缘提取(高斯拉普拉斯算子)附源码
高斯拉普拉斯算子
利用拉普拉斯算子求卷积过程恰好是边缘提取的过程。过程保留了如上所述的两种边界。但是边缘提取过程恰好是一个将图像锐化的一个过程,图像中的噪声也会被放大,大大影响了处理后基于像素对比的效果。因此引入了高斯算子,先将图像变平滑,消除噪声,再提取边界,就会达到比较理想的效果。
如下矩阵即为高斯拉普拉斯算子
-2 -4 -4 -4 -2
-4 0 8 0 -4
-4 8 24 8 -4
-4 0 8 0 -4
-2 -4 -4 -4 -2
基于高斯拉普拉斯算子边缘提取的实现
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 X
X=| (-2*1 + -4*2 + -4*3 + -4*4 + -2*5 +
-4*6 + 0*7 + 8*8 + 0*9 + -4*10+
-4*11 + 8*12 + 24*13 + 8*14 + -4*15+
-4*16 + 0*17 + 8*18 + 0*19 + -4*20
-2*21 + -4*22 + -4*23 + -4*24 + -2*X)*0.25 |
公式上面矩阵中的X在处理后的值等于表中编号的数据与高斯拉普拉斯算子矩阵对位相乘之和,再乘以 0.25,再取绝对值(如上式)。如果该值大于255,则设该值为255,如果没有超过255则设置为原值。如上过程可以描述为:处理后的像素点灰度值等于它向上4行向左4列包含的25个像素点灰度值与算子求卷积的结果。这样做会发现高斯拉普拉斯算子中会有横向4行纵向4列像素点没有参与处理。如下图即为该算法处理图像效果。
高斯拉普拉斯算子对基于像素点差异对比方法的可行性研究
表7
如上表 7所示,表中标号的区域的灰度值都不为零,未标号区域的灰度值都为零。现实中的图像在图片中都是以二维图像形式显示的。二维图像可以抽象为点、线、面三种形式。
表 7 中的标号为1的区域,进行第3.1.3节中所述的处理后,它周围会有24个像素点的值由零变为非零的数值。假设与另一幅所有的像素点的灰度值都为零的图片对比,则两幅图片中的差异点个数会增多。
表 7中标号为 2的区域,进行第3.1.3节中所述的处理后,会与1区域的效果类似。假设与另一幅所有的像素点灰度值都为零的图片对比,则两幅图片中的差异点个数会增多。
表 7 中标号为3 的区域,进行完第3.1.3节中所述的处理后,结果类似于表 8 所示,边缘的灰度值不为零,而中心的灰度值变为零。与另一幅所有的像素点灰度值都为零的图片对比,如果中心区域足够大,那么差异点个数将减少。
二维的图像都是由点、线、面组成。图像在处理完以后差异点数是不可预测的,所以高斯拉普拉斯算子不适用基于像素的图像差异对比方法。在图像差异对比中不使用该方法。
表8
源码使用方法:
把源码导入eclipse中即可,大家可以看源代码自己更改一下文件的路径,测试自己的图片。
几年前美赛出过一道图像处理题,估计今年可能会出一道吧。希望大家能用到并提前准备
好厉害的说!!
顶起!
之前预测到会出图像处理题,果然命中,虽然题目不同但是心里很激动 大家快来看看吧 好顶赞!高大上! 楼主好强~! 感谢楼主啊, 大神啊 哇 哇 wangzheng3056 发表于 2013-9-13 10:16 static/image/common/back.gif
大家快来看看吧
请问楼主,我们提取边缘后,面对200+张图片,用什么算法才能最快找出配对的,用穷举法找实在是太慢了