如何使用opencv删除图像中的船尾迹?

Posted

技术标签:

【中文标题】如何使用opencv删除图像中的船尾迹?【英文标题】:How to remove ship wake in image by using opencv? 【发布时间】:2015-07-14 09:34:36 【问题描述】:

我想用颜色来检测一艘白色的船。当船速低时,我可以得到很好的结果。但是当速度高时,我不能。因为船尾也是白色的。我尝试使用腐蚀和扩张的方法去除尾迹,但效果不好。如何去除尾迹。 你可以看到如下图片,尾流是白色的,所以很难分割 船和唤醒。你能帮助我并向我展示你的想法吗?提前谢谢!

【问题讨论】:

“我想用颜色来检测一艘白色的船。”正如您自己所说,仅靠颜色是不够的。如果所有图像都只有水 + 船,那么适当的分割(可能在灰度 img 上)会更好。 我认为功能可能会有所帮助。 【参考方案1】:

我想你问过类似的问题,关于在这种情况下检测球。此问题的答案也将与该问题的答案相似。

使用 HSV 方法检测包含白色的像素。

计算这些白色像素的光流。

与船对应的白色像素将比属于水波的白色像素具有更高的速度。

你会得到一组速度最快的像素(它们都属于飞船)。然后,尝试使用像素坐标找到运动方向上最边缘的像素(船的角像素)。如果方向是 y 方向,您只需要找到 min(y)max(y)

在这个像素周围画一个圆圈……这将检测到你的船。

【讨论】:

【参考方案2】:

我更倾向于使用 尾迹比船更线性这一事实。或者甚至说这艘船“在尾流的另一端”。

首先粗略地通过 HSV 阈值处理以获取所有“白色区域”,包括船舶和尾流,然后尝试识别并丢弃线条。

线性霍夫变换可能会有所帮助,前提是您可以将阈值图像转换为合理的边缘,这需要进行一些形态学调整。

从那里您几乎可以画出尾流线,您的工作就完成了一半。 wake-to-ship 的具体边界将是一个涉及边缘检测的更棘手的问题,但如果你只关心这一点,我认为你的问题基本上已经解决了! :p


有趣的是,这在卫星雷达图像see my quick Google scholar search 中很常见。 诚然,这些图像大多数时候不必考虑船本身,并且有不同的噪声和图像约束考虑因素,但您可能只是从他们的解决方案中得到一两个很酷的想法。

例如: 埃尔德胡塞特,克努特。 "一种用于沿海地区星载 SAR 图像的船舶和船舶尾流自动检测系统。

【讨论】:

感谢您的评论!但我认为尾流看起来更像是斑点区域而不是线条。很难得到线条。而且在我得到很多线条之后,我怎样才能检测到船?你说“船在尾流的另一端”但也许不在我们得到的某些线路的另一端。 确实如此:理想情况下,您应该让尾流汇聚在实际的船上,并找到抽象的尾流线(角度+线性方程的偏移量)将帮助您丢弃没有船的图像区域。但是,您图像中的滑水无济于事:D 感谢您的提前!

以上是关于如何使用opencv删除图像中的船尾迹?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 OpenCV 中的图像中删除空格?

如何去除opencv中的二值图像噪声?

如何在android java中使用人类删除图像中的背景

如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景

如何使用opencv从图像中删除小的彩色像素

如何删除图像中的小平行线?