Replace Values that Meet a Condition - 3D Matrix
21 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi, i have two 3D-Matrices each with a dimension of 3. I work with images and i want to use the rgb-code to create conditions for my needs. The color red got the values of 1 0 0. I want to replace the values of Matrix Z with the values of Matrix X, if Matrix X got the value 1 in dimension 1, the value 0 in dimension 2 and the value 0 in dimension 3. So 1 0 0 for red.
My code for 3D-Matrices X and Z:
Z ( X(:,:,1) == 1 & X(:,:,2) == 0 & X(:,:,3) == 0) = X ( X(:,:,1) == 1 & X(:,:,2) == 0 & X(:,:,3) == 0);
The result is not satisfying. The code changes the values in Z(:,:,1) as i want them to do, but dimension 2 and 3 are left unchanged... I hope someone can solve my problem. I guess i got the wrong syntax...
Thanks in advance Flo
0 commentaires
Réponse acceptée
Guillaume
le 28 Juin 2018
mask = X(:, :, 1) == 1 & X(:, :, 2) == 0 & X(:, :, 3) == 0; %fully saturated pure red
mask = repmat(mask, 1, 1, 3); %replicate mask across all 3 colour channels
Z(mask) = X(mask);
4 commentaires
Stephen23
le 28 Juin 2018
"But it would be great to know why my code isn't working."
Because you used a 2D logical index with a 3D array. Unfortunately there is no simple way to use a 2D mask as you want to, without splitting the array or duplicating the mask. Read this for a short discussion on this topic:
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Numeric Types dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!