rai*_*out 6 python opencv measurement time-series rate
我已经使用图像时间序列和以下两种方法自动化了测量植物面积随时间推移的任务以推断增长率:(1)Python + ArcGIS,以及(2)Python + OpenCV。
在第一种方法中,ArcGIS 允许我在图像上创建矢量网格。网格的每个单元格都包含一株植物,因此我从左上角到右下角为每个单元格编号。在创建植物像素 == 1 且其他所有内容 == 0 的二进制图像后,我应用分区统计来查找我的植物区域。通过这种方式,植物数量保持一致,因为我在时间序列中的所有图像上使用相同的网格,但这需要手动干预。
在第二种方法中,我使用 OpenCV 通过轮廓查找植物。每个轮廓的编号是根据其质心坐标和边界框尺寸自动完成的。目前我让它们“从上到下”排序,但它显然不像手工制作的网格那样完美。此外,植物#1 可能不会在第二个或第三个图像中保持植物#1,因为在实验过程中每株植物都在生长和移动,并且新植物出现并改变轮廓的总数(图像每小时拍摄一次到几个星期)。因此,我无法比较第一个图像中的植物 #1 和后续图像中的植物 #1,因为它们甚至可能不是同一种植物。
如何使用第二种方法在整个时间序列中始终对同一植物进行编号?我考虑将后续图像中的质心与前一个图像中最相似的 (x,y) 坐标相关联(一旦数据为表格形式),但这将无法提供更新的编号轮廓图像。
该问题的解决方案在于通过 OpenCV 霍夫变换函数 (cv2.HoughCircles()) 自动检测圆,找到生成的霍夫圆质心,然后将它们叠加在原始 RGB 图像上以创建参考键。由于我根本没有没有任何植物的图像,因此我调整了该方法,以便它找到正确数量的起源,但在没有植物的图像中结果会更好。
我将霍夫圆参考图像(列:OID、X、Y)和植物轮廓(列:CID、X、Y、面积等)的 csv 文件转换为 GeoPandas GeoDataFrames,并使用 Scipy 的 cKDTree 通过最近的方法将它们组合起来邻居算法。
特别感谢JHuw在https://gis.stackexchange.com/questions/222315/geopandas-find-nearest-point-in-other-dataframe中的回答 ,因为Shapely的nearest_points函数对我不起作用。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |