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

我希望提取“蓝色”、“绿色”和“黑色”原语。(我准备尝试重建已被另一种颜色的图元分割的图元)。
然而,“蓝调”添加了不同数量的白色(类似于黑色的灰度)。因此,最常见的颜色(为简单起见,舍入为12位)及其计数可能是
000 881 // black
88f 1089 // white-blue
fff 70475 // white但在较低的频率下还有其他白度。
// other white-blue
99f 207
// other grey
ddd 196我相信作者在许多图表中只使用了非常有限的纯颜色(例如3-6色),并且各种渲染工具都添加了白色。颜色可以用(0 =< x =< 1)来表示。
000 + x(FFF)
00F + x(FF0) // blue
0F0 + x(F0F) // green然而,没有要求使用原色,并且集合可以是具有任意数量的白色的任何颜色。
我如何重建不同颜色的(小)集合?如果这是可能的,然后我可以选择这些区域,转换为灰色,并以正常的方式二值化。
我更喜欢用Java编写源代码,但我怀疑任何代码都足够了;
我已经读了两个有用的问题。
"Rounding" colour values to the nearest of a small set of colours
它们使用H-C-L,可能是前进的方向,尽管它们不能直接满足我的需求。
发布于 2014-01-29 23:35:16
您可以尝试使用region growing。我认为它应该能很好地满足你的需要。当颜色相同时,只需更改阈值即可。我认为它在这里应该工作得很好,因为任何两种连接为物体的颜色之间似乎都有很大的区别。
发布于 2014-01-30 07:09:50
如果你的直觉是正确的(所有像素都是某种颜色和纯白色的线性混合),在RGB立方体中,所有颜色都将在源自白色角落的线段上对齐。
如果您为每种不同的颜色选择一个代表性像素(为了更好的准确性,请尽可能远离白色),则可以通过查找由此像素、白色和代表性像素形成的最佳对齐来识别任何其他像素的颜色。
通过计算形成的角度的余弦来测试对齐(使用3D向量,余弦是范数乘积的点积;去掉符号)。理论上,余弦应该恰好是1,但由于数值误差,它可以更小,所以只需考虑最大化余弦的代表性颜色。
要特别注意白色像素(离白色角很近),否则它们将被随机分配到一些有代表性的颜色。
发布于 2014-01-31 07:59:27
根据涉及的颜色数量及其相似性,R、G和B值的简单阈值将很快将所有颜色减少到8种颜色之一(黑色、红色、绿色、蓝色、青色、洋红色、黄色或白色)。
https://stackoverflow.com/questions/21432641
复制相似问题