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
将只包含