Python环境下目标主颜色的检测

2024-09-27 09:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个算法,检测一个图像的主要颜色与一个对象假设背景是平原。我正在运行基本步骤:

  • 对整个图像运行k-means算法(k=10)
  • 删除与pixel(0,0)具有相同类的点
  • 运行一个新的k-means算法,剩余的点(k=3)=>;3个主颜色

虽然这可能不是最聪明的算法,但我对结果非常满意,除非对象的大部分颜色与背景相同。例如,当对象在白色背景下主要是白色时,该算法自然倾向于将对象的白点与背景进行分类。在

我要怎样才能有一个在所有情况下都有效的通用方法(我对白色物体没有任何先验知识)?假设物体在水平和垂直方向上都居中是可以的。然而,对于物体的形状或颜色的多少,我们无法作出任何假设(有时它是平淡的,有时它有许多不同的颜色)。谢谢!在

(我相信我已经看过所有可能的相关帖子!)在

编辑: 我得到的典型结果是: problematic case

这就是第一个k-means如何对点进行分类(左:k=10,右:k=3): k-means results


Tags: 对象方法图像gt算法颜色分类情况
2条回答

你不太清楚当前的问题是什么。你能贴一张截图吗?在

也许你的意思是靠近对象边缘的区域(在对象和背景之间)被错误地分类为背景颜色,也就是说,你的算法剪裁过多。在这种情况下,可以使用边缘检测算法来检测对象和背景之间的边界。一旦你知道了边缘,你就知道了内部,所以你应该能够删掉除了内部之外的所有内容,然后重新运行你的算法。在

如果你的意思是对象的内部被归类为背景,那么你可以做一个泛洪填充算法。如果您对它尝试分类的每个区域进行泛洪填充,则拒绝任何不能完全泛洪填充到像素(0,0)的区域。这将给您留下一个不与对象重叠的区域列表。在

一些想法:

1)如果背景颜色是恒定的(例如,所有像素都是相同的颜色),您可以通过查找空间连接的最大组件来找到背景,该组件包含所有相同(或在某个阈值内相同)颜色的像素。您可以删除背景,然后对剩余的图像运行K-Means。在

2)如果图像中的组件与背景属于同一个簇,但在图像中没有连接,则可以通过运行连接组件算法将其拆分。或者,如果您在运行K-Means时没有包含空间信息(例如像素坐标),您可以这样做。在

3)你也可以尝试增加K值,直到对象从背景中分离(对于大多数/所有图像)。在

相关问题 更多 >

    热门问题