利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色)

利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色)

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

前言

我们平时所看到的自然图像包含RGB三个通道,区别于传统图像,由高光谱传感器获取的数据包含了很多波段,在ENVI中可以通过赋予RGB通道不同波长的波段来实现高光谱的真彩色和假彩色显示。很多从事高光谱图像处理的朋友们,基本上都是采用MATLAB进行编程,在利用MATLAB进行图像处理中,有时候会经常需要查看高光谱的真彩色和假彩色图像,因此如何利用MATLAB实现该功能也成为很多朋友们面对的一个问题,下面笔者分享自己的一些代码,希望对您的科研和工作有所帮助。

一、使用imshow函数彩色显示高光谱图像

function [rgb] = func_hyperImshow( hsi, RGBbands )
%% Hyperspectral Image color display
% Author: Zephyr Hou
% Time: 2019-12-02
% Function Usage
% Input:
%    hsi—the 3D hyperspectral dataset with the size of rows x cols x bands
%    RGBbands— the RGB bands to be displayed, with the format [R G B]
% Output:
%    rgb- the finual result with the RGB bands with the size of (rows x cols x 3)  
%% Main Function

hsi=double(hsi);
[rows, cols, bands] = size(hsi);

minVal =min(hsi(:));
maxVal=max(hsi(:));
normalizedData=hsi-minVal;

if(maxVal==minVal)
    normalizedData=zeros(size(hsi));
else
    normalizedData=normalizedData./(maxVal-minVal);
end

hsi=normalizedData;

[rows, cols, bands] = size(hsi);

if (nargin == 1)
    RGBbands = [bands round(bands/2) 1];
end

if (bands ==1)
    red = hsi(:,:);
    green = hsi(:,:);
    blue = hsi(:,:);
else
    red = hsi(:,:,RGBbands(1));
    green = hsi(:,:,RGBbands(2));
    blue = hsi(:,:,RGBbands(3));
end

rgb = zeros(size(hsi, 1), size(hsi, 2), 3);
rgb(:,:,1) = adapthisteq(red);      % Adaptive histogram equalization
rgb(:,:,2) = adapthisteq(green);
rgb(:,:,3) = adapthisteq(blue);
imshow(rgb); axis image;   % 保持图像的显示比例,其中axis为坐标轴的控制函数。
end

使用方法如下:

load('Viareggio.mat') % 导入需要显示的影像
[rgb] = func_hyperImshow(hsi,[219,144,66]); % func_hyperImshow(3D高光谱图像,[R,G,B])

如下图所示,左边为在envi中以真彩色格式显示的图像,右侧为使用该函数显示的具体效果图像。
在这里插入图片描述
可以看到通过matlab显示的彩色图像与ENVI中彩色显示图像基本上色彩相同,不同之处在于ENVI的的图像相对亮点,这是由于在ENVI进行图像显示时,软件对图像进行了自动2% 的线性拉伸,因此ENVI显示图像会稍微显得亮点。

这样通过不同的波段选择即可实现不同高光谱图像的真彩色和假彩色显示。

注意事项:

  1. 该代码基于matlab 2018a编写,如果不能显示,请排查输入数据格式函数是否正确使用matlab版本(如果版本太低,可能有些函数不支持,需要修改);
  2. 该函数已经在很多组高光谱数据上进行了测试,没有问题,indian_pines等绝大多数据没有问题;
  • 24
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
要将raw格式的高光谱图像生成真彩色图像,您可以使用MATLAB中的以下步骤: 1. 读取raw格式高光谱图像数据。 您可以使用MATLAB中的imread函数读取图像数据。但是,由于raw格式图像数据并没有包含颜色信息,所以您需要指定其它参数,例如图像大小、数据类型、数据排列方式等。 2. 对高光谱图像进行处理。 高光谱图像通常具有很多波段(bands),每个波段包含了不同的光谱信息。为了将其转换为真彩色图像,您需要将多个波段合并成RGB图像。这可以通过将三个重要的波段合并来完成,即红色波段、绿色波段和蓝色波段。 3. 将处理后的数据转换为真彩色图像。 在MATLAB中,可以使用函数cat将处理后的数据合并为RGB图像。RGB图像包含三个分别代表红、绿、蓝颜色通道的矩阵。最后,您可以使用MATLAB中的imwrite函数将图像保存为真彩色图像格式,例如JPEG或PNG等。 以下是一个简单的MATLAB代码示例,演示如何从raw格式的高光谱图像生成真彩色图像: ```matlab % 读取raw格式高光谱图像数据 raw_data = fread(fopen('example.raw'), [width, height], 'uint16'); % 对高光谱图像进行处理 red_band = raw_data(1:2:end, 1:2:end); green_band = raw_data(1:2:end, 2:2:end); blue_band = raw_data(2:2:end, 2:2:end); % 将处理后的数据转换为真彩色图像 rgb_image = cat(3, red_band, green_band, blue_band); imwrite(rgb_image, 'example.jpg'); ``` 在这个示例中,我们假设原始高光谱图像大小为width * height,每个像素值的数据类型为uint16。然后,我们将图像数据处理为三个独立的波段(即红色、绿色和蓝色波段),并使用cat函数将它们合并为RGB图像。最后,我们使用imwrite函数将RGB图像保存为JPEG格式的真彩色图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值