MATLAB: How to create RGB image with 3 bands from hyperspectral image

3d matrixhyperspectralimage acquisitionimage processingImage Processing Toolboxmultispectralrgb

Hi, I have a Hyperion EO-1 satellite image and i want to create an RGB band with band numbers (40,31,13) as (R,G,B). The hyperion image has 242 bands. But I'm having trouble opening the L1R file properly.
I am using Matlab 2011, and 2014 hyperion image. I load the image with hdfinfo and hdfread commands like this;
hdfinfo('EO1H1930282003203110PY.L1R');
fileinfo = hdfinfo('EO1H1930282003203110PY.L1R');
sds_info = fileinfo.SDS(1);
hdfread(sds_info);
ans=imhdf;
But this loads a matrix [3128,242,256] , although it should be [3128,256,242] how can i fix this?
After loading the image as 3D matrix i try to create the RGB image with selecte 3 bands as shown below it creates [3128,3,256] matrix but I cant use imwrite, imshow or any other displaying functions on it.
imrgb [:,1,:] = imhdf [:,40,:];
imrgb [:,2,:] = imhdf [:,31,:];
imrgb [:,3,:] = imhdf [:,13,:];
image(imrgb);
Error using image
Error using image
Indexed CData must be size [MxN], TrueColor CData must be
size [MxNx3]
Please answer, thank you.

Best Answer

You could use the Scyllarus hyperspectral image processing toolbox. The MATLAB version of this toolbox is available for non-commercial use and can be downloaded from http://scyllarus.research.nicta.com.au/
To load and save multispectral images (consisting of pairs of .hdr and .fla files), the functions to look at are FLARead and FLAWrite under src/io. With these functions you can read from and write to the .fla format (ENVI-compatible), rather than any colour image format. Alternatively you can save the image to a .mat file but this option usually produces a much larger image.
To convert a hyperspectral image to RGB, you could use the function recover_RGBImage.m under /src/shared. There are examples in that .m file.
Related Question