如何去除图像的模糊背景?

我正在进行一个叶子病害分类的项目。我希望使用高效的机器学习分割算法去除整个数据集中图像的模糊背景。输出应该是ROI的彩色版本。由于数据集的体量巨大,我希望使用训练时间较短的算法。那么,您能建议我可以坚持使用的选项吗?

下面附上了数据集样本。

带有病害症状的叶子图像


回答:

这个特定问题并不难解决。情况并没有那么糟糕,因为只有一个前景对象,这意味着我们可以使用简单的方法来解决它。@***的边缘检测本能是正确的,因为这是前景与模糊背景最明显的区别方式。

我将图像转换为灰度并使用了Canny边缘检测器。我并没有真正调整它,所以我们得到了很多边缘,但我们只关心找到叶子的边缘。幸运的是,我们不必花很多时间为每张图像调整它,因为我们只关心最大的连续边缘。

enter image description here

我扩张了图像以连接附近的边缘(Canny生成的线条宽度为1像素,容易断开),然后使用findContours获取所有白色线条的轮廓。我对轮廓进行排序,选择面积最大的轮廓,并使用它创建一个掩码。

enter image description here

掩码的锯齿状让我感到困扰,所以我进行了一次开运算(以切断细小的锯齿)后,再进行中值模糊(以平滑边缘)。

enter image description here

然后,剩下的就是使用掩码裁剪图像,完成工作。(我不得不将其更改为jpg格式以符合2MB的限制,因此这里可能会有一些压缩 artifact)。

enter image description here

这是代码(注意这是OpenCV 3.4版,如果你使用的是不同的大版本,那么你需要修改findContours那一行)

如果你想将其推广到包含多个前景对象,你可以按大小过滤轮廓,并拒绝小于某个阈值的轮廓。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注