【问题标题】:Selecting points on image parts by color weight通过颜色权重选择图像部分上的点
【发布时间】:2011-05-12 14:04:58
【问题描述】:

需要在图像上选择指定数量的点(实际上是在该图像的一部分上)。图像的较暗部分更重要。

最简单的方法是随机选择它们。但是,即使放弃使用过的点,通常也会因为某些点过于靠近其他点而结束,尤其是在考虑权重时。

也许在选择点后应该动态减少权重?没试过。

我注意到原始图像有太多不同的颜色,所以我想对其进行平滑处理以切断相似的颜色。然而,转换为灰度是不够的。
我使用Emgu CV(OpenCV 包装器)函数对图像进行二值化。比我试图计算流域但计算出的区域并不那么容易分开。一般来说,分水岭是一种非常“不直观”的方法来检测较暗的地方。

简单地说:我想在图像上从较暗的部分开始标记点 - 这些部分应该比较亮的部分更频繁地标记。点应分散在一组相似的颜色上,以免在附近堆积。

算法不一定要准确。它可以在下一次迭代中给出不同的结果。从 10 到 150-200 的点数不会很大。

如何计算从较暗区域开始散布在图像上的指定点数?

要形象化我的意思,请参见下图。它包含选定的点(数量。~20)。大多数较暗的部分被选中。下一次迭代后,这些点不必出现在相同的位置。但我想要的是当它们的数量会更高时选择较轻区域上的点。

当然,对于不同的图像,跳出黑暗所需的点数会有所不同。

【问题讨论】:

  • 您的问题中缺少一些关键部分。您在均匀/随机和“权重较高的较暗部分”之间存在矛盾。你需要清除它。黑暗区域应该“值”多少。白场中的单个黑点是“暗区”吗?关于减少与选择随机点的颜色数量有关的讨论是什么?
  • 我对我的意思做了一些澄清。
  • 您能否展示一个示例输入文件以及预期的结果?

标签: c# image-processing opencv emgucv


【解决方案1】:

如果我正确理解您的问题,您需要一张图片上的点列表。该列表必须包含来自黑色区域的几个点和来自白色区域的几个点。

一种简单的方法 - 遍历每个像素。将当前像素的值存储在变量's'中,然后:

if(s < 64) // Darker
    if(rand() % 5 == 1)
        // Add to list
else      // White
    if(rand() % 25 == 1)
        // Add to list

【讨论】:

  • 图片不同。这是关于动态设置黑暗。
  • 您可以取 5x5(或更大)邻域的平均值,并用它来计算黑暗阈值。
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多