微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在图像时间序列中一致地对轮廓编号?

如何解决如何在图像时间序列中一致地对轮廓编号?

我已经使用图像时间序列和以下两种方法自动完成了随时间测量植物面积以推断生长速度的任务:(1)Python + ArcGIS和(2)Python + OpenCV。

在第一种方法中,ArcGIS允许我在图像上创建矢量网格。网格的每个单元格都包含一个植物,因此我从左上角到右下角对每个单元格进行编号。创建植物像素== 1且其他所有元素== 0的二进制图像后,我应用区域统计来找到我的植物面积。这样,由于我在时间序列中的所有图像上使用相同的网格,因此植物编号保持一致,但是需要人工干预。

ArcGIS method of numbering plants by manually creating a vector grid.

在第二种方法中,我使用OpenCV通过轮廓查找植物。每个轮廓的编号都是基于其质心坐标和边框尺寸自动进行的。目前,我已经对它们进行了“从上到下”的排序,但是显然不如手工制作的网格那么完美。此外,植物#1可能不会在第二张或第三张图片中停留在植物#1上,因为每棵植物都在实验过程中生长并移动,并且新植物出现并改变了轮廓的总数(每小时拍摄一次图像,直到到几个星期)。因此,我无法比较第一个图像中的植物#1和后续图像中的植物#1,因为它们甚至可能不是同一植物。

如何使用第二种方法在整个时间序列中对同一工厂进行一致编号?我考虑将后续图像中的质心与上一个图像中最相似的(x,y)坐标相关联(一旦数据以表格形式出现),但这将无法提供更新的编号轮廓图像。

Plants numbered by contours.

解决方法

解决此问题的方法是通过OpenCV Hough变换功能(cv2.HoughCircles())自动检测圆,找到生成的Hough圆质心,然后将其覆盖在原始RGB图像上以创建参考关键点。由于我根本没有任何植物的图像,因此我对该方法进行了调整,以便找到正确数量的起源,但是在没有植物的图像中效果会更好。

Reference Key created from Hough Circles

我将生成的hsv圆形参考图像(列:OID,X,Y)和植物轮廓(列:CID,X,Y,Area等)的csv文件转换为GeoPandas GeoDataFrames,并使用Scipy的cKDTree进行组合通过最近邻居算法。

特别感谢JHuw在https://gis.stackexchange.com/questions/222315/geopandas-find-nearest-point-in-other-dataframe中的回答,因为Shapely的最近点功能对我不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。