有人可以解释一下这个matlab代码如何获得图像的红色通道?

时间:2011-12-11 19:11:17

标签: image matlab channel

这是代码

  img = imread('imageName.jpg');
  redChannel = img(:,:,1);
  blackColor = zeros(size(redChannel));
  redImage = cat(3,redChannel,blackColor,blackColor);

我的想法是我们先读取图像并将其保存在变量中 然后

我们知道图像将是3维512x512x3

第三个维度与渠道

有关
       1: red
       2: green
       3: blue

现在redChannel变量将采用图像的红色通道

所以,我的问题是,为什么我不能只使用

       image(redChannel)

显示图片?问题是它除了红色外没有显示任何东西

现在他说

        blackColor = zeros(size(redChannel));
        redImage = cat(3,redChannel,blackColor,blackColor);

blackColor到处都是零,其大小为512x512

与每个频道的大小相同

关于猫,我不明白为什么他这样做....

1 个答案:

答案 0 :(得分:4)

让我们以此图片为例:

enter image description here

image(redChannel)将显示红色通道,但会截断0到63之间的值。使用默认颜色条时,低值将为蓝色,高值为红色。您的问题是63以上的所有值都用相同的红色表示:

enter image description here

imagesc(redChannel)将执行相同的操作,但它会缩放颜色条,使得蓝色对应于redChannel的最小值,而红色对应于其最大值(黄绿色是中间值):

enter image description here

imshow(redChannel)将显示红色通道,但是黑色和白色(它不会有0-63的人工制品):

enter image description here

image(redImage)会显示相同的信息,但是黑色和红色,而不是黑色和白色。基本上它将绿色和蓝色部分删除为红色,因此您只有红色通道仍然显示为红色。 实际上,当输入有1个通道或3个通道时,image会有不同的行为。 当它有一个通道时,它会将值截断为0-63并用蓝红色条显示。当它有3个通道时,它会将其显示为RGB彩色图像:

enter image description here

所以在你的情况下:

   redImage = cat(3,redChannel,blackColor,blackColor);

redImage连接三个通道。 对于红色(第一个)通道,它会输入输入图像的红色通道。 对于绿色和蓝色(第二和第三)通道,它只放置零。基本上,redImageimg类似,但绿色和蓝色通道设置为零。