这是代码
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
与每个频道的大小相同
关于猫,我不明白为什么他这样做....答案 0 :(得分: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
类似,但绿色和蓝色通道设置为零。