图像中颜色的二值化

时间:2014-01-29 13:33:21

标签: image-processing graphics colors

我从基于像素的线图中提取基元,并希望按颜色选择。因此在下面

enter image description here

我希望提取“蓝色”,“绿色”和“黑色”原语。 (我准备尝试重建已被另一种颜色的基元分割的基元。)

然而,“蓝色”具有不同量的白色添加(类似于黑色的灰度)。因此,最常见的颜色(为简单起见,舍入到12位)及其计数可能是

000   881 // black
88f   1089 // white-blue
fff   70475 // white

但在较低频率下还有其他程度的白度

// other white-blue 
99f   207

// other grey
ddd   196

我相信作者在许多图表中只会使用非常有限数量的纯色(例如3-6),并且各种渲染工具都会添加白色。 IOW颜色可以用(0 =< x =< 1)

表示
000 + x(FFF)
00F + x(FF0) // blue
0F0 + x(F0F) // green

然而,不需要使用原色,并且该组可以是具有任意白色量的任何颜色。

如何重建(小)不同颜色的组合?如果这是可能的,我可以选择那些区域,转换为灰色,并以正常方式二值化。

我更喜欢Java中的source,但我怀疑任何代码都足够了;

我读过两个有用的SO问题

"Rounding" colour values to the nearest of a small set of colours

HCL color to RGB and backward

使用H-C-L并且可能是一种前进的方式,尽管它们不能直接满足我的要求。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用region growing。我认为它应该很好地满足您的需求。只需更改相同颜色的阈值即可。我认为它应该在这里运作良好,因为在作为对象连接的任何两种颜色之间似乎存在很大差异。

答案 1 :(得分:0)

如果您的直觉是正确的(所有像素都是某种颜色和纯白色的线性混合),则在RGB立方体中,所有颜色将在源自白色角落的线段上对齐。

如果您为每种不同的颜色选择一个代表性像素(尽可能远离白色,以获得更好的精确度),您可以通过查找此像素,白色和代表形成的最佳对齐来识别任何其他像素的颜色像素。

通过计算形成的角度的余弦来测试对准(使用3D矢量,余弦是指数乘积的点积; 放下符号)。从理论上讲,余弦应该恰好为1,但由于数值误差可能会更小,所以只需考虑使余弦最大化的代表性颜色。

特别注意白色像素(到白色角落的短距离),否则它们将被随机分配到某些代表性颜色。

答案 2 :(得分:0)

根据所涉及的颜色数量及其相似性,R,G和B值的简单阈值会迅速将所有颜色减少为8种颜色之一(黑色,红色,绿色,蓝色,青色,品红色,黄色,或白色)。