我从基于像素的线图中提取基元,并希望按颜色选择。因此在下面
我希望提取“蓝色”,“绿色”和“黑色”原语。 (我准备尝试重建已被另一种颜色的基元分割的基元。)
然而,“蓝色”具有不同量的白色添加(类似于黑色的灰度)。因此,最常见的颜色(为简单起见,舍入到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
使用H-C-L并且可能是一种前进的方式,尽管它们不能直接满足我的要求。
答案 0 :(得分:1)
您可以尝试使用region growing。我认为它应该很好地满足您的需求。只需更改相同颜色的阈值即可。我认为它应该在这里运作良好,因为在作为对象连接的任何两种颜色之间似乎存在很大差异。
答案 1 :(得分:0)
如果您的直觉是正确的(所有像素都是某种颜色和纯白色的线性混合),则在RGB立方体中,所有颜色将在源自白色角落的线段上对齐。
如果您为每种不同的颜色选择一个代表性像素(尽可能远离白色,以获得更好的精确度),您可以通过查找此像素,白色和代表形成的最佳对齐来识别任何其他像素的颜色像素。
通过计算形成的角度的余弦来测试对准(使用3D矢量,余弦是指数乘积的点积; 放下符号)。从理论上讲,余弦应该恰好为1,但由于数值误差可能会更小,所以只需考虑使余弦最大化的代表性颜色。
特别注意白色像素(到白色角落的短距离),否则它们将被随机分配到某些代表性颜色。
答案 2 :(得分:0)
根据所涉及的颜色数量及其相似性,R,G和B值的简单阈值会迅速将所有颜色减少为8种颜色之一(黑色,红色,绿色,蓝色,青色,品红色,黄色,或白色)。