source: trunk/src/get_file_info.m @ 995

Last change on this file since 995 was 993, checked in by sommeria, 7 years ago

various updates

File size: 7.1 KB
Line 
1%'get_file_info': determine info about a file (image, multimage, civdata,...) .
2%------------------------------------------------------------------------
3% [FileInfo,VideoObject]=get_file_info(fileinput)
4%
5% OUTPUT:
6% FileInfo: structure containing info on the file (case of images or video), in particular
7%      .FileType: type of file, needed as input of read_field.m
8%      .Height: image height in pixels
9%      .Width:  image width in pixels
10%      .BitDepth: nbre of bits per pixel  (8 of 16)
11%      .ColorType: 'greyscale' or 'color'
12%      .NumberOfFrames
13%      .FrameRate: nbre of frames per second, =[] for images
14% VideoObject: in case of video
15%
16% INPUT:
17% fileinput: name, including path, of the file to analyse
18
19%=======================================================================
20% Copyright 2008-2017, LEGI UMR 5519 / CNRS UGA G-INP, Grenoble, France
21%   http://www.legi.grenoble-inp.fr
22%   Joel.Sommeria - Joel.Sommeria (A) legi.cnrs.fr
23%
24%     This file is part of the toolbox UVMAT.
25%
26%     UVMAT is free software; you can redistribute it and/or modify
27%     it under the terms of the GNU General Public License as published
28%     by the Free Software Foundation; either version 2 of the license,
29%     or (at your option) any later version.
30%
31%     UVMAT is distributed in the hope that it will be useful,
32%     but WITHOUT ANY WARRANTY; without even the implied warranty of
33%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34%     GNU General Public License (see LICENSE.txt) for more details.
35%=======================================================================
36
37function [FileInfo,VideoObject]=get_file_info(fileinput)
38VideoObject=[];
39if exist(fileinput,'file')==2
40    FileInfo.FileName=fileinput;
41    FileInfo.FileType='txt'; %default
42else
43    FileInfo.FileType='';
44    return
45end
46[tild,tild,FileExt]=fileparts(fileinput);%get the file extension FileExt
47
48switch FileExt
49    case '.fig'
50        FileInfo.FileType='figure';
51    case {'.xml','.xls','.dat','.bin'}
52        FileInfo.FileType=regexprep(FileExt,'^.','');% eliminate the dot of the extension;
53    case {'.seq','.sqb'}
54        [A,FileInfo,timestamps,errormsg]=read_rdvision(fileinput,[]);
55%         %%%%%
56%         FileInfo.NumberOfFrame=24000;
57%         %%%%%%%%
58    case '.h5'
59        hinfo=hdf5info(fileinput);
60        if strcmp(hinfo.GroupHierarchy.Attributes(1).Value.Data,'MultipassPIVResults')
61            FileInfo.FileType='pivdata_fluidimage';
62            FileInfo.CivStage=6; % A MODIFIER
63        end
64    case '.cine'
65        [FileInfo,BitmapInfoHeader, CameraSetup]=readCineHeader(fileinput);
66        FileInfo.FileType='cine_phantom';
67        FileInfo.NumberOfFrames=FileInfo.ImageCount;
68        FileInfo.FrameRate=CameraSetup.FrameRate;
69        FileInfo.Height=BitmapInfoHeader.biHeight;
70        FileInfo.Width=BitmapInfoHeader.biWidth;
71         FileInfo.BitDepth=BitmapInfoHeader.biBitCount;
72    otherwise
73        if ~isempty(FileExt)% exclude empty extension
74            FileExt=regexprep(FileExt,'^.','');% eliminate the dot of the extension
75            if ~isempty(FileExt)
76                if ~isempty(imformats(FileExt))%case of images
77                    try
78                        imainfo=imfinfo(fileinput);
79                        if length(imainfo) >1 %case of image with multiple frames   
80                            FileInfo=imainfo(1);%take info from the first frame
81                            FileInfo.NumberOfFrames=length(imainfo);
82                            FileInfo.FileType='multimage';
83                        else
84                            FileInfo=imainfo;
85                            FileInfo.NumberOfFrames=1;
86                            FileInfo.FileType='image';
87                        end
88                        FileInfo.FileName=FileInfo.Filename; %correct the info given by imfinfo
89                        nbfield=numel(fieldnames(FileInfo));
90                        FileInfo=orderfields(FileInfo,[nbfield nbfield-1 nbfield-2 (1:nbfield-3)]); %reorder the fields of fileInfo for clarity
91                    end
92                else
93                    error_nc=0;
94                    try
95                       [Data,tild,tild,errormsg]=nc2struct(fileinput,[]);
96                        if ~isempty(errormsg)
97                            error_nc=1;
98                        else
99                            if isfield(Data,'absolut_time_T0') && isfield(Data,'hart') && ~isempty(Data.absolut_time_T0) && ~isempty(Data.hart)
100                                FileInfo.FileType='civx';
101                                if isfield(Data,'patch2') && isequal(Data.patch2,1)
102                                    FileInfo.CivStage=6;
103                                elseif isfield(Data,'fix2') && isequal(Data.fix2,1)
104                                    FileInfo.CivStage=5;
105                                elseif  isfield(Data,'civ2')&& isequal(Data.civ2,1)
106                                    FileInfo.CivStage=4;
107                                elseif isfield(Data,'patch')&&isequal(Data.patch,1)
108                                    FileInfo.CivStage=3;
109                                elseif isfield(Data,'fix')&&isequal(Data.fix,1)
110                                    FileInfo.CivStage=2;
111                                else
112                                    FileInfo.CivStage=1;
113                                end
114                            elseif isfield(Data,'Conventions') && strcmp(Data.Conventions,'uvmat/civdata')
115                                FileInfo.FileType='civdata'; % test for civx velocity fields
116                                FileInfo.CivStage=Data.CivStage;
117                            else
118                                FileInfo.FileType='netcdf';
119                                FileInfo.ListVarName=Data.ListVarName;
120                            end
121                        end
122                    catch ME
123                        error_nc=1;
124                    end
125                    if error_nc
126                        try
127                            if exist('VideoReader.m','file')%recent version of Matlab
128                                VideoObject=VideoReader(fileinput);
129                                FileInfo=get(VideoObject);
130                                FileInfo.FileType='video';
131                            elseif exist('mmreader.m','file')% Matlab 2009a
132                                VideoObject=mmreader(fileinput);
133                                FileInfo=get(VideoObject);
134                                FileInfo.FileType='mmreader';
135                            end
136                            FileInfo.BitDepth=FileInfo.BitsPerPixel/3;
137                            FileInfo.ColorType='truecolor';
138                            FileInfo.FileName=fileinput;
139                            nbfield=numel(fieldnames(FileInfo));
140                            FileInfo=orderfields(FileInfo,[nbfield nbfield-3 nbfield-1 nbfield-2 (1:nbfield-4)]); %reorder the fields of fileInfo for clarity
141                        end
142                    end
143                end
144            end
145        end
146end
147switch FileInfo.FileType
148    case {'image','multimage','mmreader','cine_phantom','video','netcdf','civdata'}
149        FileInfo.FileIndexing='on'; % allow to detect file index for scanning series
150end
Note: See TracBrowser for help on using the repository browser.