How to import a .MAP OMNIC picta file into matlab

23 次查看(过去 30 天)
Hi ,
I wanted to import a .MAP file into matlab. The map is hyperspectral data and I would like to extract the x, y coordinates for each point, and a spectrum at each point, there are around 2500 pixels. I have found nothing on the web about importing OMNIC Picta .MAP files
What code or function could I use to import and extract this data, I cannot attach the .MAP file but I can send it via email if that helps,
Thanks in advance :)
  2 个评论
Subhadeep Koley
Subhadeep Koley 2021-4-14
@Taranvir Bedi What is the exact dimension (height, width, bands) of the data present in the .MAP file?
Taranvir Bedi
Taranvir Bedi 2021-4-14
Hi @Subhadeep Koley , there are 51x51 pixel points , and a spectrum at each point (2601), each spectrum has 432 data points

请先登录,再进行评论。

回答(2 个)

Adam Wright
Adam Wright 2022-1-21
编辑:Adam Wright 2022-1-21
I had a similar problem. I was not able to read the .map file directly into MATLAB, but I was able to use the Omnic Picta program that came with my Nicolet FTIR (FT-IR) microscope to export the map data to a format readable by MATLAB:
  • Under ‘Analyze Spectra and Maps’, choose ‘Export’ to export the map data as an ENVI format .dat file
  • To load the ENVI's binary hyperspectral image data with MATLAB we can use the 'multibandread' command, with the parameters contained in the ‘.hdr; file which is also produced during the export process
So for example, my .hdr file reads
ENVI
description = {Spectrum 1 of 100}
samples = 10
lines = 10
bands = 863
header offset = 0
data type = 4
interleave = bip
z plot titles = {Wavenumbers (cm-1), %Transmittance}
pixel size = {0.000100001, 0.000099995}
followed by a list of wavelengths. So in MATLAB, I can access the data using the following code:
precision = 'float';
headerOffset = 0;
interleave = 'bip';
byteOrder = 'ieee-le';
% Read the data
map_data = multibandread('Au 5nm map.dat',[10, 10, 863], precision, headerOffset, interleave, byteOrder);
which in this example produces map_data, a 10 x 10 x 863 matrix: 100 spectra (a the 10 x 10 points on my map grid) each containing intensities at 863 wavelengths.
Hopefully this is useful to someone else in future!

Subhadeep Koley
Subhadeep Koley 2021-4-14
As, .MAP is not a standard file format. It is difficult to provide exact solution.
However, if the .MAP file is a binary file, you can try using multibandread(_). However, in order to use multibandread(_) apart from height, width, bands, you'll also need precision, header offset, interleave value and byte order of your data.
Below is one example, you can tweak these parameters to check if that works for you.
% Specify the parameters
precision = 'double';
headerOffset = 0;
interleave = 'bsq';
byteOrder = 'ieee-le';
% Read the data
data = multibandread('yourFile.MAP',[51, 51, 432], precision, headerOffset, interleave, byteOrder);
  1 个评论
Adam Wright
Adam Wright 2022-1-21
Thanks very much for this! See my answer below: this code works if the map is first exported to a .dat file using Omnic Picta. The parameters for multibandread may be found in the .hdr file generated during export.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Filter Banks 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by