0

这是代码

  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

与每个通道的大小相同

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

4

1 回答 1

4

我们以这张图片为例:

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

所以在你的情况下:

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

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

于 2011-12-11T19:52:17.863 回答