How to open .cdf file

8 次查看(过去 30 天)
mohd akmal masud
mohd akmal masud 2024-1-19
评论: Voss 2024-1-20
Hai Everyone,
Anyone can help me how to open the .cdf file as attacheed.
The .cdf file is their header file. Attached.
I tried this code but failed.
**I also attached the function imshow3D
clc
clear all
close all
sz = [128 128 128];
fname = 'jaszaki13110n1date14012024531193.cdf';
fid = fopen(fname);
data = fread(fid,'*uint16'); % assuming uint
fclose(fid);
% this is blindly devectorized
% may still be transposed, but i can't tell due to symmetry
% note that data is unit-scale single-precision float
data = reshape(data,sz);
imshow3D(data);
Error using reshape
Number of elements must not change. Use [] as one of the size inputs to automatically calculate the appropriate size for that
dimension.
  1 个评论
Dyuman Joshi
Dyuman Joshi 2024-1-19
cdfread would be a better option here.
However, the file you have attached seems to be corrupt - as can be seen from the output of fopen() and the error from cdread()
arr = unzip('New folder (3).zip')
arr = 1×4 cell array
{'New folder (3)/desktop.ini'} {'New folder (3)/imshow3D.m'} {'New folder (3)/jaszaki1318n1date15012024…'} {'New folder (3)/jaszaki1318n1date15012024…'}
fname = 'jaszaki13110n1date14012024531193.cdf';
fid = fopen(fname)
fid = -1
cdfread(fname)
Error using cdfread
Unable to open file. File might be corrupt or filename might have unsupported characters.

请先登录,再进行评论。

采纳的回答

Voss
Voss 2024-1-19
移动:Voss 2024-1-19
sz = [128 128 128];
unzip('New folder (3).zip')
ls
'New folder (3)' 'New folder (3).zip'
addpath('New folder (3)') % to run imshow3D.m
The size of the cdf file (16777216 bytes) is consistent with the file containing 128*128*128 64-bit elements.
F = dir(fullfile('New folder (3)','*.cdf'))
F = struct with fields:
name: 'jaszaki1318n1date15012024.cdf' folder: '/users/mss.system.nXJGBc/New folder (3)' date: '16-Jan-2024 03:34:26' bytes: 16777216 isdir: 0 datenum: 7.3927e+05
F(1).bytes/8 == prod(sz)
ans = logical
1
Whether those are uint64s or doubles, I don't know, but I'd guess doubles based on what imshow3D shows.
fid = fopen(fullfile(F(1).folder,F(1).name));
data = fread(fid,'*uint64');
fclose(fid);
data = reshape(data,sz);
figure
imshow3D(data);
fid = fopen(fullfile(F(1).folder,F(1).name));
data = fread(fid,'double');
fclose(fid);
data = reshape(data,sz);
figure
imshow3D(data);
Does that look like what's expected?
  2 个评论
mohd akmal masud
mohd akmal masud 2024-1-20
Dear @Voss
Thank you very much, this is what I need.
Voss
Voss 2024-1-20
You're welcome!

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by