您的位置  > 互联网

(干货)导数滤波器的应用图像处理算法

重货,尽快送达

在农业中,通常需要获得不同面积的土地。 虽然取得这些土地的操作相对容易,但成本较高。 此外,如果土地形状不规则,测量土地面积的大小就会变得相对困难。

幸运的是,有大量以卫星图像形式公开的农田数据。 下图是获得的土地图片。 根据这些图片并应用图像处理算法,可以计算出每块土地的面积。

我们可以使用导数过滤器,因为它似乎符合人类区分土地或土地块的方式。 当我们观察物体时,我们通过对比和明暗来判断物体的形状、类型和形状。 类似地,导数滤波器可用于查找对比度区域。 如果像素值与其周围像素之间的差值大于阈值,则将其标记为 1,否则标记为 0。这将创建具有原始图像的选定边缘的二值图像。

原始图像中存在大量的噪声和细节,这可能会降低算法的成功率。 建议在应用导数滤波操作之前对图像进行模糊滤波以去除噪声。 我们可以使用任何模糊滤波器来完成图像去噪。 由于我们的主要目标是去除噪声和微小细节,同时保留绘图的颜色以进行对比,因此我们使用 4x4 中值滤波器。 然后对图像进行灰度化处理,得到灰度图像,用于后续的边缘检测。 具体结果如下图所示。

然后尝试三种边缘检测方法以找到最佳结果。

第一种类型的边缘检测滤波器是 Sobel 滤波器。 该滤波器对图像的每个像素执行梯度检测。 内置函数执行水平和垂直操作并将结果组合在一起。 具体结果如下所示。

结果表明,生成的图像几乎没有噪声。 然而,不幸的是,将过滤后的图像与原始图像进行比较,可以看到图之间的许多分界线没有很好地拾取。 在农田颜色与相邻地块差异不大的地区尤其如此。

第二种边缘检测方法是 Canny 滤波器。 过滤结果如下。 从Canny过滤结果可以看出,Canny过滤器检测到了更多的边缘。 但也有缺点。 这种方法会产生更多的噪音。 考虑到 Canny 算法将通过幅度阈值函数的像素与通过稍低阈值函数的相邻像素合并,这是预期的。 Canny 算法比简单的 Sobel 滤波器更复杂。 它还取决于事先进行的高斯平滑。 使用中值滤波器可能会妨碍获得最佳结果。

第三种滤波器是高斯滤波器的拉普拉斯滤波器。 该过滤器提取的结果如下图所示。

从结果中我们可以看到,无论我们使用什么过滤器,我们都可以看到大多数突出的道路都被检测到。 然而,农田内的小区域和靠近道路的房屋是否会产生噪音取决于我们选择的过滤器类型。 农田图像的这一特性使其非常适合高斯滤波器的拉普拉斯算子。 看看测试结果,可以得到比较理想的结果。 找到数量最多、噪音最小的道路。

为了进一步去除图像中的噪声,请去除总像素面积小于平均像素面积值的所有白色区域。 这个阈值是我们经过多次实验得出的经验值。 小伙伴们还可以尝试其他的门槛。

然后将图像反转以获得场面积。 然后将这个结果用大小位4进行扩展,结果如下图所示。

有了这张图像,计算每块土地的面积就很简单了。 (or)函数可用于求各区域的面积。 还有一小部分田地并不是真正的田地,有些是道路或其他细节。 为了缓解这些区域的影响,我们只计算面积大于平均值减去一个标准差的区域。

然后为每个区域着色并在其位置打印其像素尺寸。 结果如下图所示。 打印尺寸是该区域中的像素数。 除非像素和图像尺寸之间存在已知的比率,否则这些值将毫无用处。 然而,我们知道卫星图像(例如地图)通常具有比例尺,这为像素值提供了意义。

结果是相当令人满意的。 该应用程序能够将大多数地块划分为各自的特定区域。 不过,也有一些例外。 例如,像素值为 47,680 的大橙色部分将两个区域混合在一起。 这可以通过使用膨胀值来解决。 另一件需要考虑的事情是,道路的扩建确实会侵占农场的像素区域。 为了获得更准确的农场价值,可能需要将这种侵蚀的结果添加到农场的总面积中。 有兴趣的朋友可以自己实现一下。

接下来的两个给出了另一个示例结果