How to use custom enviwrite code to use map_info for generating envi header file?

2 次查看(过去 30 天)
I want to use custom_enviwrite matlab code(attached) to use the map_info (attached) generated from sentinel2 image of jp2 format to produce the envi header file similar to attached header file. I request larger matlab community to suggest me how to achive this. I will appreciate your kind cooperation and help.
Devendra

回答(1 个)

Suraj Kumar
Suraj Kumar 2024-9-6
Hi Devendra,
Based on my understanding, you want to generate an ENVI header file using MATLAB functioncustom_ enviwrite’. To achieve this, you can go through the following steps and the attached code snippets:
1. Extract and format the 'map_info' and 'projection_info' strings from the data to match the ENVI header requirements.
% Construct the coordinate_information struct
map_info = 'UTM, 1.000, 1.000, 699960.000, 3300000.000, 20.000000, 20.000000, 43, North, WGS-84, units=Meters';
projection_info = 'PROJCS["WGS_1984_UTM_Zone_43N",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",75.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]';
2. Organize the data by creating structures for coordinate and wavelength data.
% Coordinate information structure
coordinate_information.map_info = map_info_str;
coordinate_information.projection_info = projection_info_str;
% Wavelength data
wavelength_data = [560.0, 665.0, 705.0, 740.0, 783.0, 842.0, 865.0];
3. Implement the custom_enviwrite function validating the inputs to match the expected formats and convert images to suitable formats if necessary. Then write the image to a binary file and create a ENVI header file.
function custom_enviwrite(image, fname, coordinate_information, wavelength_data)
img = single(image);
cl = class(img);
data_types = [4, 1, 2, 3, 12, 13];
t = data_types(strcmp({'single', 'int8', 'int16', 'int32', 'uint16', 'uint32'}, cl));
wfid = fopen(fname, 'w');
fwrite(wfid, img, cl);
fclose(wfid);
fid = fopen([fname '.hdr'], 'w');
fprintf(fid, 'ENVI\n');
fprintf(fid, 'description = {Exported from MATLAB}\n');
fprintf(fid, 'samples = %i\n', size(image, 2));
fprintf(fid, 'lines = %i\n', size(image, 1));
fprintf(fid, 'bands = %i\n', size(image, 3));
fprintf(fid, 'data type = %i\n', t);
fprintf(fid, 'interleave = bsq\n');
fprintf(fid, 'map info = {%s}\n', coordinate_information.map_info);
fprintf(fid, 'projection info = {%s}\n', coordinate_information.projection_info);
fprintf(fid, 'wavelength units = Nanometers\n');
fprintf(fid, 'wavelength = {\n%.2f', wavelength_data(1));
for j = 2:length(wavelength_data)
fprintf(fid, ', %.2f', wavelength_data(j));
end
fprintf(fid, '}\n');
fclose(fid);
end
4. Generate the ENVI files by executing the function to create the files.
fname = 'output_image';
custom_enviwrite(image_data, fname, coordinate_information, wavelength_data);
To know more about the strcmp’ or ’class’ functions in MATLAB, you can refer the following documentations:
Hope this helps!

类别

Help CenterFile Exchange 中查找有关 Image Data Workflows 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by