将黑色像素转换为其他颜色

时间:2014-06-25 11:08:54

标签: matlab image-processing

我有一个逻辑图像。我想将黑色像素转换为其他颜色。

我可以将它们转换成黑绿色和蓝色但我不知道如何将其他颜色转换为橙色,紫色,粉红色......

有没有办法做到这一点?

我使用此代码将它们转换为蓝色

RGB = zeros(3072, 4080, 1);
RGB(:, :, 3) = 1-BW;  
imshow(RGB);

祝你好运

4 个答案:

答案 0 :(得分:1)

要获得非原色,您需要编辑多个颜色层的值 - 每个像素由红色,绿色和蓝色子像素组成(因此为RGB)。基本上你需要找到强度的组合来使你的颜色。

如果您想将颜色设置为亮黄色,则以下情况应该有效:

RGB(:, :, 3) = blue_intensity;
RGB(:, :, 2) = green_intensity;

由于黄色在光线下由蓝色和绿色制成。如果你想要一种颜色多于另一种颜色,只需要使一个强度值高于另一个。

如果您准确发布您想要实现的内容,我可以发布更清晰的答案。

另外我相信你的第一行应该是RGB = zeros(3072, 4080, 3);,制作一个3d矢量,3深,适合RGB图像

答案 1 :(得分:0)

您可能希望使用ind2rgb根据特定的色彩映射将2D矩阵索引(索引图像)转换为RGB图像

rgb为三个值(范围[0..1]),表示您要分配的新颜色到BWfalse然后

的像素
RGB = ind2rgb( BW, [ r, g, b; 1 1 1] );

将所有黑色转换为[r,g,b]并将true像素保持为白色。


这是一个例子:

BW = rand(10) < .5;
RGB = ind2rgb( BW, [100/255 10/255 50/255; 1 1 1]);
figure;
imshow( RGB );

结果应该是(BW的随机性):
enter image description here

答案 2 :(得分:0)

<强>代码

BW = logical(round(rand(5,6))) %// random logical image as input for demo
color1 = [129 52 168]; %// random color to be superimposed on the black pixels

%// Create a 3D double array with zeros from BW replaced by color1 values 
%// and ones by zeros
RGB1 = bsxfun(@times,double(~BW),permute(color1,[1 3 2]));

%// Replace the zeros created from the previous step to 255s, as they
%// denote ones in the input logical image
RGB = uint8(RGB1+(RGB1==0).*255); %// desired output RGB image in UINT8 format
imagesc(RGB),axis off %// display the RGB image for verification

输出(代码运行时)

BW =
     1     0     1     1     0     1
     0     0     1     0     0     1
     0     1     1     1     1     0
     0     0     1     1     1     1
     0     1     0     0     0     0

enter image description here

希望这对你有用!让我知道。

答案 3 :(得分:0)

也许这个FEX代码可能会有所帮助 - Color brewer。根据您在颜色酿造器网页中选择的颜色,该功能将在MATLAB中显示。您所要做的就是使用这些数字来表示单个像素。