将RGB值映射到颜色名称MATLAB

时间:2016-01-02 03:33:15

标签: matlab image-processing colors image-segmentation matlab-cvst

我一直致力于在不同色彩空间的图像上执行K-means聚类。聚类中心代表颜色值,我想用颜色名称描述颜色值。

群集操作的结果示例: Orignal, Segmented Image

我现在想从分段的img中描述这3个像素(RGB值)的颜色名称:

 134.2263  146.4977  194.6406
 137.5899   78.5631   50.4859
 111.6383  131.4764   36.3863

获得如下输出:深绿色,棕色,浅紫色等。

我认为这与使用HTML颜色代码类似,但我不知道如何在matlab中应用它。

stackoverflow上有类似的问题,但与python,java等有关,而不是matlab。是否有任何matlab功能可以实现这一点?

谢谢!

1 个答案:

答案 0 :(得分:3)

解决方案草图:

下载包含有关rgb值和匹配名称的信息的网页:

ctable = urlread('https://en.wikipedia.org/wiki/List_of_colors_%28compact%29');

解析rgb值,每个值恰好出现两次:

rgb_vals = regexp(ctable,'rgb\([0-9]+,[0-9]+,[0-9]+\)','match')';
rgb_vals = rgb_vals(1:2:end);

解析颜色名称:这可能有点棘手,但可能。通过检查几对,确保订单与已解析的rgb值列表匹配。

最后,构造一个KNN分类器,给出一个新的rgb值,找到表中最接近的rgb值,并输出匹配的名称。您可以使用Matlab的knn

另一个类似的选择是寻找一个在线rgb-to-name转换器,并在每次需要时向它发送请求。

修改 首先按行结尾分割ctable中的内容可能更容易,然后当您找到具有rgb值的行时,可以在下一行中查找该名称。