Glcm (feature extraction method) give me an output in 'struct' type, while i need the output in 'double' type. I need a 'double' type as the input variable for the next step.
So, I've tried to convert it using several code showed below.
[gl] = glcm (B); [gl] = struct2cell (gl); [gl] = cell2mat (gl); [fetrain] = double (gl); The code give me an output but it's in 'complex double' type.
Is there a better way to convert 'struct' to 'double' type?
Or to convert 'complex double' to 'double' type?
Any help and suggestion would be very appreciated. Thank you.
11 Answer
First of all, rather than first converting to a cell and then to a matrix, you can convert directly from a struct to a double using struct2array.
fetrain = struct2array(gl); That aside, there is no difference between a "complex double" and a double. They are both of type double.
class(1i) % double You can use real to get the real component of the complex number or abs if you need the magnitude of it.
real(1+1i) % 1 abs(1+1i) % 1.4142 In your case this would be:
fetrain_real = real(fetrain); fetrain_mag = abs(fetrain); Update
By default struct2array concatenates the data horizontally. If you want your data to be a matrix that is nFields x nData, then you could do something like the following:
fetrain = struct2array(gl); % Reshape to be nFields x nData fetrain = permute(reshape(fetrain, [], numel(fieldnames(gl)), numel(gl)), [2 1 3]); 3 