首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像中颜色的二值化

图像中颜色的二值化
EN

Stack Overflow用户
提问于 2014-01-29 21:33:21
回答 3查看 351关注 0票数 0

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

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

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

代码语言:javascript
复制
000   881 // black
88f   1089 // white-blue
fff   70475 // white

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

代码语言:javascript
复制
// other white-blue 
99f   207

// other grey
ddd   196

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

代码语言:javascript
复制
000 + x(FFF)
00F + x(FF0) // blue
0F0 + x(F0F) // green

然而,没有要求使用原色,并且集合可以是具有任意数量的白色的任何颜色。

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

我更喜欢用Java编写源代码,但我怀疑任何代码都足够了;

我已经读了两个有用的问题。

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

HCL color to RGB and backward

它们使用H-C-L,可能是前进的方向,尽管它们不能直接满足我的需求。

EN

回答 3

Stack Overflow用户

发布于 2014-01-29 23:35:16

您可以尝试使用region growing。我认为它应该能很好地满足你的需要。当颜色相同时,只需更改阈值即可。我认为它在这里应该工作得很好,因为任何两种连接为物体的颜色之间似乎都有很大的区别。

票数 1
EN

Stack Overflow用户

发布于 2014-01-30 07:09:50

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

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

通过计算形成的角度的余弦来测试对齐(使用3D向量,余弦是范数乘积的点积;去掉符号)。理论上,余弦应该恰好是1,但由于数值误差,它可以更小,所以只需考虑最大化余弦的代表性颜色。

要特别注意白色像素(离白色角很近),否则它们将被随机分配到一些有代表性的颜色。

票数 0
EN

Stack Overflow用户

发布于 2014-01-31 07:59:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21432641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档