我有一个问题,提取3个波段下的名称R,G和B,然后使用这些波段作为3个颜色通道的RGB图片。这是一张高光谱图像,它有103个波段,而正常的RGB图像只有3个波段。给我这个问题的那个人把它描述为非常基本的东西,然而,我对它有一段非常困难的时间。我可能对MatLab有语法问题。这张图片以.mat文件的形式出现。大小为610x340x103。我使用了不同的代码,搜索了论坛等,但我失败了。这是我上次尝试的代码。
load("PaviaU.mat")
Blue=paviaU(:,:,7);
imwrite(Blue,"Blue.jpg")
newBlue=imread("Blue.jpg");
imshow(newBlue)
imagesc(newBlue) %*this line gives the result as a scaled image*
Green=paviaU(:,:,21);
imwrite(Green,"Green.jpg")
newGreen=imread("Green.jpg");
imshow(newGreen)
Red=paviaU(:,:,53);
imwrite(Red,"Red.jpg")
newRed=imread("Red.jpg");
imshow(newRed)
rgbImage = paviaU(:,:,[newRed,newGreen,newBlue])
当我使用imagesc(Red)
而不是imshow
时,我看到了图片,但这不是我想看到的。此外,我在MatLab的App部分分析了这个.mat文件,其中有一个高光谱图像应用程序,由于缺乏波段信息,我无法观察到光谱。但是,我觉得在图像处理库里面有一个文件,它的名字是paviaU.dat,这个文件是可以工作的,在App里面,我观察了频谱,玩了一下。我在这里不明白的是什么?有什么解决办法吗?您可以通过链接PaviaU.mat找到内部变量为paviaU的PaviaU.mat文件
1条答案
按热度按时间oo7oh9g91#
正如所评论的,在MatLab中,RGB图像的范围应该是0,1。
除以最大值是将范围转换为0,1的简单方法。
当将单通道图像显示为灰度时,我们可以使用
imshow(I, [])
。为了检查像素值,我们可以在
imshow
之后添加impixelinfo
(我们也可以添加标题):RGB图像看起来很暗,可能是因为图像是在未进行Gamma校正的情况下捕获的。
为了应用伽玛校正,根据sRGB标准,我们可以使用lin2rgb函数:
代码示例:
输出
srgbImage
图像: