Image 如何使用此命令从图像中选择特定颜色?

Image 如何使用此命令从图像中选择特定颜色?,image,matlab,image-processing,image-segmentation,Image,Matlab,Image Processing,Image Segmentation,我得到了一张图片,图片中的单词被正确分割并用不同的颜色表示 图为: 我被告知,即使没有源文件,我也可以从图像中选择特定的单词/颜色,并将其保存以供进一步处理。这可以通过创建一个新图像来实现,v,这样 v=r+g*256+b*256*256+1 其中r、g和b分别为红色、蓝色和绿色通道 我试图使用它,但它创建的只是一个白色的空白图像 img = imread('color_test.bmp'); r = img(:,:,1); g = img(:,:,2); b = img(:,:,3);

我得到了一张图片,图片中的单词被正确分割并用不同的颜色表示

图为:

我被告知,即使没有源文件,我也可以从图像中选择特定的单词/颜色,并将其保存以供进一步处理。这可以通过创建一个新图像来实现,
v
,这样

v=r+g*256+b*256*256+1
其中r、g和b分别为红色、蓝色和绿色通道

我试图使用它,但它创建的只是一个白色的空白图像

img = imread('color_test.bmp');
r = img(:,:,1);
g = img(:,:,2);
b = img(:,:,3);

v=r+g*256+b*256*256+1;

我不明白上面的v图像如何允许我选择单个颜色?

您应用于创建向量的变换
v
只是为所有可能的RGB颜色值创建唯一数值的一种方法。要了解这是如何工作的,请想象一个简化的RGB系统,其中每种颜色的值限制在0到9之间。此外,我们将255替换为10,从而简化了您的转换:

 v = r + g*10 + b*100
现在很容易看出,
(1)
v
始终介于0和999之间 (2) 所有红色值均在以下位置编码
(3) 所有绿色值均以十位编码
(4) 所有蓝色的颜色值都以百为单位进行编码

因此,不同的颜色总是会在
v
中产生不同的值

假设您的图像包含不同的颜色。然后,矩阵
v
将只包含
n
唯一值(即,每种颜色一个),可使用命令
unique

 colorValues = unique(v); 
如果您现在想要识别图像中与特定颜色相对应的所有区域,例如,向量
colorValues
中的第一个值,您只需使用

v == colorValues(1)
这将为您提供包含指定颜色的所有单元格中的颜色

如果要根据颜色将图像分割为多个图像,可以使用

newImg = zeros(size(img)); 
newImg(repmat(v == colorValues(1), [1 1 3]) = 255; 
现在
newImg
应该只包含与
colorValues(1)
中的颜色匹配的所有内容

要寻找不同的颜色,只需使用不同的索引,例如

 newImg(repmat(v == colorValues(2), [1 1 3]) = 255

用于创建向量
v
的变换只是为所有可能的RGB颜色值创建唯一数值的一种方法。要了解这是如何工作的,请想象一个简化的RGB系统,其中每种颜色的值限制在0到9之间。此外,我们将255替换为10,从而简化了您的转换:

 v = r + g*10 + b*100
现在很容易看出,
(1)
v
始终介于0和999之间 (2) 所有红色值均在以下位置编码
(3) 所有绿色值均以十位编码
(4) 所有蓝色的颜色值都以百为单位进行编码

因此,不同的颜色总是会在
v
中产生不同的值

假设您的图像包含不同的颜色。然后,矩阵
v
将只包含
n
唯一值(即,每种颜色一个),可使用命令
unique

 colorValues = unique(v); 
如果您现在想要识别图像中与特定颜色相对应的所有区域,例如,向量
colorValues
中的第一个值,您只需使用

v == colorValues(1)
这将为您提供包含指定颜色的所有单元格中的颜色

如果要根据颜色将图像分割为多个图像,可以使用

newImg = zeros(size(img)); 
newImg(repmat(v == colorValues(1), [1 1 3]) = 255; 
现在
newImg
应该只包含与
colorValues(1)
中的颜色匹配的所有内容

要寻找不同的颜色,只需使用不同的索引,例如

 newImg(repmat(v == colorValues(2), [1 1 3]) = 255

用于创建向量
v
的变换只是为所有可能的RGB颜色值创建唯一数值的一种方法。要了解这是如何工作的,请想象一个简化的RGB系统,其中每种颜色的值限制在0到9之间。此外,我们将255替换为10,从而简化了您的转换:

 v = r + g*10 + b*100
现在很容易看出,
(1)
v
始终介于0和999之间 (2) 所有红色值均在以下位置编码
(3) 所有绿色值均以十位编码
(4) 所有蓝色的颜色值都以百为单位进行编码

因此,不同的颜色总是会在
v
中产生不同的值

假设您的图像包含不同的颜色。然后,矩阵
v
将只包含
n
唯一值(即,每种颜色一个),可使用命令
unique

 colorValues = unique(v); 
如果您现在想要识别图像中与特定颜色相对应的所有区域,例如,向量
colorValues
中的第一个值,您只需使用

v == colorValues(1)
这将为您提供包含指定颜色的所有单元格中的颜色

如果要根据颜色将图像分割为多个图像,可以使用

newImg = zeros(size(img)); 
newImg(repmat(v == colorValues(1), [1 1 3]) = 255; 
现在
newImg
应该只包含与
colorValues(1)
中的颜色匹配的所有内容

要寻找不同的颜色,只需使用不同的索引,例如

 newImg(repmat(v == colorValues(2), [1 1 3]) = 255

用于创建向量
v
的变换只是为所有可能的RGB颜色值创建唯一数值的一种方法。要了解这是如何工作的,请想象一个简化的RGB系统,其中每种颜色的值限制在0到9之间。此外,我们将255替换为10,从而简化了您的转换:

 v = r + g*10 + b*100
现在很容易看出,
(1)
v
始终介于0和999之间 (2) 所有红色值均在以下位置编码
(3) 所有绿色值均以十位编码
(4) 所有蓝色的颜色值都以百为单位进行编码

因此,不同的颜色总是会在
v
中产生不同的值

假设您的图像包含不同的颜色。那么矩阵
v
将只包含