How to convert 3D matrix to 1D?
Afficher commentaires plus anciens
I got a color image and store into a variable A.
A =
(22,10,10) (22,10,10) (39,40,50)
(89,11,14) (23,11,11) (99,10,10)
(89,11,14) (69,10,10) (99,10,10)
x=1 when loop horizontally I wish to register the first color I seem and label it into x.
when loop same color then label it into same label.
when new color is seem then register the color and label into x+1.
I wish to get a table like
color label
(22,10,10) 1
(39,40,50) 2
(89,11,14) 3
(23,11,11) 4
(99,10,10) 5
(69,10,10) 6
so result finally get is
B=
1 1 2
3 4 5
3 6 5
How to get the label table and how to get the result?
2 commentaires
Walter Roberson
le 3 Déc 2015
Modifié(e) : Walter Roberson
le 3 Déc 2015
What data type is A? The notation you use is not MATLAB syntax, and
A = {
[22,10,10], [22,10,10], [39,40,50];
[89,11,14], [23,11,11], [99,10,10];
[89,11,14], [69,10,10], [99,10,10] }
would not be a 3D matrix.
Tan Wen Kun
le 3 Déc 2015
Modifié(e) : Tan Wen Kun
le 3 Déc 2015
Réponse acceptée
Plus de réponses (1)
Walter Roberson
le 3 Déc 2015
If you do not need the labels to start from 1 at the upper left, then
[color, ~, idx] = unique(reshape(A, [], 3), 'rows');
B = reshape(idx, size(A,1), size(A,2));
9 commentaires
Guillaume
le 3 Déc 2015
Well, you just have to make the unique 'stable' for the one to start in the upper left.
Slightly trickier is to make the scan horizontal rather than vertical.
Tan Wen Kun
le 3 Déc 2015
Modifié(e) : Tan Wen Kun
le 3 Déc 2015
Tan Wen Kun
le 3 Déc 2015
Modifié(e) : Tan Wen Kun
le 3 Déc 2015
Guillaume
le 3 Déc 2015
A = cat(3, img(:,:1),img(:,:2),img(:,:3);
completely unnecessary. this is just the same as
A = img;
"Error using unique (line 33) Unrecognized option". Which version of matlab are you running?
Tan Wen Kun
le 3 Déc 2015
Walter Roberson
le 3 Déc 2015
The 'stable' option was introduced in R2012a. Are you using a MATLAB that is older than that?
That's a bit ancient. It looks like the stable sort was introduced in the next version (2012a).
You can use unique without 'stable' but it means that the labels will be ordered by colour. That is label 1 will be the colour with the lowest rgb triplet (black if it exists) label 2 the colour with the 2nd lowest rgb triplet, etc.
Tan Wen Kun
le 3 Déc 2015
Guillaume
le 3 Déc 2015
Without 'stable', it's not possible to have a row or column ordering of labels with unique. You would have to use sort with the stable option (I'm fairly certain that did exist in 2011b) and the find the duplicate yourself. It's possible but it's worthy of a question in itself.
As for your new question, please start a new question as it is barely related to the current one. When you ask the question, please explain clearly what your definition of connected is. In your above example, I consider 4 and 5 to be connected orthogonally, and 3 and 5 to be connected diagonally.
Catégories
En savoir plus sur Image Arithmetic dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!