creating a matrix from an image

3 visualizzazioni (ultimi 30 giorni)
Shabnam M
Shabnam M il 11 Dic 2020
Modificato: Rik il 11 Dic 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 Commenti
Paul Hoffrichter
Paul Hoffrichter il 11 Dic 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 il 11 Dic 2020
I need also the index related to data of MM

Accedi per commentare.

Risposta accettata

Ameer Hamza
Ameer Hamza il 11 Dic 2020
Modificato: Ameer Hamza il 11 Dic 2020
You can use meshgrid() like this
[r,c] = ndgrid(1:size(M,1), 1:size(M,2));
MM = [r(:), c(:), M(:)];
  6 Commenti
Rik
Rik il 11 Dic 2020
Modificato: Rik il 11 Dic 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 il 11 Dic 2020
Yes, ndgrid is more appropriate here. I have edited the answer.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by