2010-11-19 61 views
1

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

这样做的最简单方法是随机选择它们。但即使丢掉使用过的积分,通常也会在某些点与其他点太靠近的情况下结束,特别是在尊重体重时。

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

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

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

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

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

想象我的意思是看下面的图片。它包含选定的点(数量~20)。大多选择较暗的部分。下次迭代后,点不必出现在相同的位置上。但是我想要的是当它们的数量更高时,选择较亮区域上的点。

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

Picture after points selection

+2

您的问题中缺少一些关键部分。你在均匀/随机和“较暗部分加权较高”之间存在矛盾。你需要清除。一个黑暗的地区应该多“值得”。白色字段中的单个黑点是否为“黑暗区域”?这个关于减少选取随机点的颜色数量的讨论是什么? – 2010-11-19 11:28:31

+0

我对我的意思做了一些澄清。 – peo 2010-11-19 18:43:28

+1

您能否展示一个示例输入文件以及预期结果? – bjoernz 2010-11-21 12:38:33

回答

0

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

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

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

图像是不同的。这是关于动态设置黑暗的。 – peo 2010-11-22 07:33:39

+0

您可以取5x5(或更大)邻域的平均值,并用它来计算黑度阈值。 – 2010-11-22 08:29:21