creating a matrix from an image

1 view (last 30 days)
Shabnam M
Shabnam M on 11 Dec 2020
Edited: Rik on 11 Dec 2020
Dear all,
I have an image and when it is read in matlab, it is [m*n] matrix, named M,
I need to create another matrix, named MM, which is exactly M, but the indexes are also listed in that.
In fact, MM has 3 columns and the third column is M (:), but the first two columns are i and j which
i=1:m, j=1:n
Thanks in advance
  2 Comments
Paul Hoffrichter
Paul Hoffrichter on 11 Dec 2020
Trying to follow you. For this example, spell out what you want MM to be.
M =
1 2 3
4 5 6
7 8 9
10 11 12
>> M(:)
ans =
1
4
7
10
2
5
8
11
3
6
9
12
Shabnam M
Shabnam M on 11 Dec 2020
I need also the index related to data of MM

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 11 Dec 2020
Edited: Ameer Hamza on 11 Dec 2020
You can use meshgrid() like this
[r,c] = ndgrid(1:size(M,1), 1:size(M,2));
MM = [r(:), c(:), M(:)];
  6 Comments
Rik
Rik on 11 Dec 2020
Edited: Rik on 11 Dec 2020
The cause of this inconsistency is that Matlab stores arrays in a column-major form. So if you want to use (:) to transform an array into a vector, you need to make sure the result of your coordinate grid matches that order.
The solution is simple: replace meshgrid by ndgrid. Each of these functions has their use, but ndgrid will give the required order in this case. (you could also sort r and c, but that would be an unnecessary operation)
Ameer Hamza
Ameer Hamza on 11 Dec 2020
Yes, ndgrid is more appropriate here. I have edited the answer.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!