フィルターのクリア

How to convert .hdr image data set to .mat?

21 ビュー (過去 30 日間)
Nandita  Sarkar
Nandita Sarkar 2022 年 2 月 2 日
編集済み: DGM 2022 年 2 月 4 日
Please help to save my hdr image data into .mat file.
  5 件のコメント
Nandita  Sarkar
Nandita Sarkar 2022 年 2 月 3 日
I have attached the zip file.
Voss
Voss 2022 年 2 月 4 日
編集済み: Voss 2022 年 2 月 4 日
OK. The hdr file looks like a text file that looks like this:
ENVI
description = {
File Resize Result, x resize factor: 1.000000, y resize factor: 1.000000.
[Wed Feb 02 15:19:23 2022]}
samples = 361
lines = 392
bands = 6
header offset = 0
file type = ENVI Standard
data type = 12
interleave = bsq
sensor type = Unknown
byte order = 0
x start = 3349
y start = 3650
map info = {UTM, 1.000, 1.000, 642525.000, 2403045.000, 3.0000000000e+001, 3.0000000000e+001, 45, North, WGS-84, units=Meters}
coordinate system string = {PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",87.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]}
wavelength units = Unknown
band names = {
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B1.TIF):image),
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B2.TIF):image),
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B3.TIF):image),
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B4.TIF):image),
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B5.TIF):image),
Resize (Layer (Band 1:LC08_L2SP_138045_20161121_20200905_02_T1_SR_B6.TIF):image)}
What information do you want out of that and how should it be stored in the mat file? If you want to store it just as it is, you can do this:
fid = fopen('resizeimage.hdr');
data = char(fread(fid).');
fclose(fid);
save('resizeimage.mat','data');

サインインしてコメントする。

採用された回答

DGM
DGM 2022 年 2 月 4 日
編集済み: DGM 2022 年 2 月 4 日
You can use multibandread() to read these types of data files.
In order to get all those parameters, you need to read the .hdr file first. You could use enviinfo(). Similarly, you could use hypercube() to do both without needing multibandread().
I don't have enviinfo() or hypercube(), and I'm not climbing a mountain in order to install either. I just manually fetched the parameters from the header file. It's a plain text file, and the parameter translation into MATLAB terms is explained here:
headerfile = 'resizeimage.hdr'; % normally you'd use something to read this to get the parameters
datafile = 'resizeimage.bsq'; % i added the extension
datasize = [392 361 6]; % [lines samples bands]
dataprec = 'uint16'; % data type = 12
dataoffset = 0;
interleaveopt = 'bsq';
endianopt = 'ieee-le'; % byte order = 0
A = multibandread(datafile,datasize,dataprec,dataoffset,interleaveopt,endianopt);
imshow(A(:,:,1),[]) % show layer 1
In lieu of manually parsing each header file, you could probably write a simple replacement for enviinfo() relatively easily.

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by