当前位置: 首页 > 知识库问答 >
问题:

如何在Matlab中有效地将rgb像素颜色转换为8种极端的rgb颜色

卫沈义
2023-03-14

图像中的每个像素都有一个rgb值,看起来像[r g b],其中r、g、b是从0到255的整数值。

现在,让我们定义8个rgb颜色极端:

[0]黑色

[0 255]蓝色

[0 255 0]绿色

[0 255]青色

[255 0 0]红色

[255 0 255]洋红色

[255 0]黄色

[255]白色。

Matlab中有没有一种有效的方法,或者Matlab中的一个函数,可以将一幅图像转换成另一幅具有这8种极端颜色的图像,并设置阈值?

共有2个答案

夏侯博
2023-03-14

一个快速的方法是阈值每个通道,将其转换为0或1,然后乘以255:

r_threshold = 128;
g_threshold = 117;
b_threshold = 192;
% im is original image
im2(:,:,1) = (im(:,:,1) - r_threshold) > 0;   % threshold red channel...
im2(:,:,2) = (im(:,:,2) - g_threshold) > 0;   % ... green channel
im2(:,:,3) = (im(:,:,3) - b_threshold) > 0;   % ... and blue channel
im2 = im2 .* 255;   % change range from [0,1] to [0,255]

一种等效但不太明显的阈值处理方法(对于较新版本的MATLAB)是将阈值向量置换为1x1x3向量,并执行元素减法:

im2 = (im .- permute([r_threshold, g_threshold, b_threshold], [1 3 2])) > 0;
im2 = im2 .* 255;
甘兴学
2023-03-14

如果你实际想要的是分配每个像素的颜色什么人会说是最接近这8种颜色的当前像素你应该计算一个L2距离之间的颜色在每个像素和每一个八个颜色在感知均匀的颜色空间像实验室*。最小的距离将是指定的颜色。在RGB空间中计算距离并不符合人类所说的“最接近的颜色”。

https://en.wikipedia.org/wiki/Lab_color_space

您可以使用MATLAB函数pdist2实现这一点。

https://www.mathworks.com/help/stats/pdist2.html

 类似资料:
  • 我有一个返回十进制值的java代码,如下所示 第一个值表示红色的颜色代码,第二个值表示绿色的颜色代码,第三个值表示蓝色的颜色代码。 有没有什么方法可以将这些RGB值转换为java中相应的颜色?

  • 更新2:XSSFWorkbook不提供对调色板的访问,因此我要问以下问题:访问XSSFWorkbook中的调色板

  • 问题内容: 我在该主题上找到的所有内容都只是将十六进制转换为rgb,然后添加一个Alpha1。我也想从十六进制数字中获得所需的Alpha。 诸如或明显具有不为0或1的Alpha值的颜色。 问题答案: 我已经制作了一个快速的JSfiddle表格,可以将8位十六进制代码转换为CSS rgba值;) 基础很简单-将您提供的字符串分成两位数的一部分,并转换为alpha通道的百分比率和RGB通道的小数位。标

  • 这就是我所做的 这将返回一个字符串“0XFFhexcode”,我想将其转换为long,将其存储,然后将其用作颜色 我有以下错误

  • 问题内容: 如何在CIE Lab颜色模型中显示对象颜色。 但是我无法通过CIE Lab强制进行这项工作(尽管TYPE_Lab是在ColorSpace类中提供的) 谢谢。 问题答案: 这是我的实现:

  • 问题内容: 我想用Python更改单一颜色。 如果存在使用PIL的快速解决方案,我会更喜欢此解决方案。 此刻,我用 问题答案: 如果计算机上可用,请尝试执行以下操作: 它将使用多一点(3倍)的内存,但它应该快得多(〜5倍,但对于更大的图像,更多)。 另请注意,如果您只有RGB(而不是RGBA)图像,则上面的代码比需要的代码稍微复杂一些。但是,此示例将单独保留Alpha波段,而没有一个更简单的版本。