How to create a Matrice from a structure

1 ビュー (過去 30 日間)
Hidir ABAY
Hidir ABAY 2016 年 5 月 20 日
編集済み: Walter Roberson 2016 年 5 月 31 日
Hello everyone, first sorry for my poor english ^^
I ask for your help today because I have a little problem.
I have created a structure like this :
values=regionprops(L,image,'PixelValues')
So, here I have a structure named 'values' that contains intensity values for each pixel of each 'region' or 'object' L. Some region contains 5 pixels, some others only 1 so and so..
So I have a structure like this, for exemple: values
ans= 150
200
ans= 125
75
21
ans= 50
etc etc
I want to create a matrice with this structure and I dont know how to do it.
In my program I have already created a matrice from a structure. My structure is
meanValues=regionprops(L,image,'MeanIntesity')
and so,
matrice=cell2mat(struc2cell(meanValues))
and it works well.
Why does it work for this one ? Because meanValues is a structure that contains only one value for each region. So there are any probleme to create a matrice from this.
How can I create a matrice for my strucuture named 'values' ?? I don't know..
Thanks for reading, and for youre future answers :) !
  2 件のコメント
Hidir ABAY
Hidir ABAY 2016 年 5 月 31 日
Hello, thank you for your answer and your advice.

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

回答 (2 件)

Guillaume
Guillaume 2016 年 5 月 27 日
"...and it works well." and is also overly complicated:
meanintensity = [meanValues.meanIntensity];
will be a lot faster and is the proper way to convert scalar fields of a structure array into a matrix.
The answer to your question depends on which fields of the regionprops structure you want to convert to a matrix. Unfortunately, you haven't told us that. However, if as you say it's one of these fields with a various number of element, how are you expecting to have that into a single matrix?
Maybe you want to concatenate it all into one vector:
allPixelIdxList = vertcat(values.PixelIdxList);
Note that the above will only work if the field you want to concatenate is always a column vector.
But in the end, why do you want to convert the output into a matrix? Why can't you work with the structure as it is?
  1 件のコメント
Hidir ABAY
Hidir ABAY 2016 年 5 月 31 日
Hello, haha you were right, I did not need to work with matrix. I find the way to use my structure. Thanks for your answer.

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


Nut
Nut 2016 年 5 月 27 日
Hi,
if "meanValues" is a single value and you return a 2d matrix from it, I think that if "values" is an array you should return a 3d matrix. I don't know the right command to do this... but if you can accept a not much efficient solution, you can try to apply the same syntax you have already created. Example (this is not a right syntax, it is just to explain the solution, you have to adjust it):
matrice = zeros(dim1,dim2,number_of_values); % Preallocation of "matrice"
for i = 1:number_of_values
matrice(:,:,i) = matrice=cell2mat(struc2cell(values(i)))
end
  1 件のコメント
Hidir ABAY
Hidir ABAY 2016 年 5 月 31 日
Thank you for your answer I hope it will help another one. I find a way to work with my structure and so I don't need to create a matrix anymore. Have a nice day.

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

Community Treasure Hunt

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

Start Hunting!

Translated by