我想获取图像中所有像素值最接近图像中某些像素的像素。例如,我有一张海洋(深蓝色),晴朗天空(浅蓝色),海滩和房屋的图像。我想找到最接近深蓝色的所有像素,以便将其归类为水。我的问题是天空也被归类为水。有人建议使用K最近邻算法,但网上有很少使用旧C风格的例子。任何人都可以使用OpenCv C ++为我提供K-NN的示例吗?
答案 0 :(得分:0)
“将其归类为水”和“获取图像中具有最接近图像中某些像素的像素值的所有像素”不是相同的任务。对于您描述的分类,颜色属性不够。水和天空上总会有许多相同的彩色点。所以你必须使用更详细的分析。例如,如果您知道您的物体是自连接的,您可以使用像水碎的东西来填充这个区域,并忽略与水相同颜色的天空中的远处和未连接区域(假设您将通过边缘探测器地平线成功检测到 - 划分水和天空的线)。
你也可以使用你想要选择的对象的更多信息,如结构:计算它的熵等。然后你可以在多维空间中使用K-最近邻算法,其中第一维3是颜色,第四维 - 熵等。但是你也可以简单地检查每个图像像素,如果它在所选像素区域的epsilon-neighborhood中(我的意思是颜色熵4D空间,颜色为3维,熵为1维),使用简单的欧几里德度量 - 它非常快可以通过GPU加速。