How to import a .MAP OMNIC picta file into matlab

11 visualizaciones (últimos 30 días)
Taranvir Bedi
Taranvir Bedi el 12 de Abr. de 2021
Comentada: Adam Wright el 21 de En. de 2022
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 comentarios
Subhadeep Koley
Subhadeep Koley el 14 de Abr. de 2021
@Taranvir Bedi What is the exact dimension (height, width, bands) of the data present in the .MAP file?
Taranvir Bedi
Taranvir Bedi el 14 de Abr. de 2021
Hi @Subhadeep Koley , there are 51x51 pixel points , and a spectrum at each point (2601), each spectrum has 432 data points

Iniciar sesión para comentar.

Respuestas (2)

Adam Wright
Adam Wright el 21 de En. de 2022
Editada: Adam Wright el 21 de En. de 2022
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 el 14 de Abr. de 2021
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 comentario
Adam Wright
Adam Wright el 21 de En. de 2022
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.

Iniciar sesión para comentar.

Community Treasure Hunt

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

Start Hunting!

Translated by