Replace Values that Meet a Condition - 3D Matrix

21 vues (au cours des 30 derniers jours)
Flo
Flo le 28 Juin 2018
Commenté : Flo le 28 Juin 2018
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

Réponse acceptée

Guillaume
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
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:
Flo
Flo le 28 Juin 2018
Thx!

Connectez-vous pour commenter.

Plus de réponses (0)

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!

Translated by