利用 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等绝大多数据没有问题;
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

独不懂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值