首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Matlab中将高光谱图像转换成RGB

如何在Matlab中将高光谱图像转换成RGB
EN

Stack Overflow用户
提问于 2022-10-13 15:04:00
回答 1查看 68关注 0票数 2

我有一个问题,在提取3个波段的名称R,G,和B,然后使用这些带作为3个彩色通道的RGB图片。这是一幅高光谱图像,它有103个波段,相对于普通的RGB图像只有3个。给我这个问题的人把它描述为一个非常基本的问题,但是我对它感到非常困难。我可能有Matlab的语法问题。图片以.mat文件的形式出现。大小为610x340x103。我使用了不同的代码,搜索论坛等,但我失败了。这是我上次试过的代码。

代码语言:javascript
运行
复制
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的文件可以工作,而在应用程序中,我观察到了频谱,并对其进行了播放。我在这里不明白什么意思?有解决办法吗?您可以通过此链接找到PaviaU.mat文件中的变量为paviaU

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 21:09:43

正如所评论的,在MATLAB中,RGB图像的范围应该是0,1

除以最大值是将范围转换为0,1的简单方法。

代码语言:javascript
运行
复制
rgbImage = rgbImage / max(rgbImage(:));

当单通道图像显示为灰度时,我们可以使用imshow(I, [])

为了检查像素值,我们可以在impixelinfo之后添加imshow (我们也可以添加标题):

代码语言:javascript
运行
复制
figure;
imshow(Blue, []);
title('Blue');
impixelinfo

RGB图像看起来很暗,可能是因为这些图像是在没有伽玛校正的情况下拍摄的。

在应用Gamma校正时,根据sRGB标准,可以使用lin2rgb函数:

代码语言:javascript
运行
复制
srgbImage = lin2rgb(rgbImage);

代码示例:

代码语言:javascript
运行
复制
load("PaviaU.mat")

Blue = paviaU(:,:,7);
figure;imshow(Blue, []);title('Blue');impixelinfo

Green = paviaU(:,:,21);
figure;imshow(Green, []);title('Green');impixelinfo

Red = paviaU(:,:,53);
figure;imshow(Red, []);title('Red');impixelinfo

rgbImage = cat(3, Red, Green, Blue); % Concatenate Red, Green and Blue channels.
rgbImage = rgbImage / max(rgbImage(:)); % Convert to range [0, 1]

figure;imshow(rgbImage);title('rgbImage');impixelinfo

srgbImage = lin2rgb(rgbImage); % Apply Gamma correction.
figure;imshow(srgbImage);title('srgbImage');impixelinfo

srgbImage = im2uint8(srgbImage); % Convert from double in range [0, 1] to uint8 in range [0, 255] (optional).
imwrite(srgbImage, 'srgbImage.png'); % Save image for testing.

输出srgbImage图像:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74058014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档