这是代码

  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 票数:4 已采纳

让我们以该图像为例:

在此处输入图片说明

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

在此处输入图片说明

imagesc(redChannel)将做同样的事情,但是它将缩放颜色条,使得蓝色对应于redChannel的最小值,红色对应于其最大值(黄绿色是中间值):

在此处输入图片说明

imshow(redChannel)将为您显示红色通道,但以黑白显示imshow(redChannel)不会显示0-63伪像):

在此处输入图片说明

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

在此处输入图片说明

因此,在您的情况下:

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

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

  ask by John John translate from so

未解决问题?本站智能推荐: