Retrieve original index from a masked array
37 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Raphael Alhadef
le 28 Juil 2020
Commenté : Raphael Alhadef
le 30 Juil 2020
Hi, I am not sure if it is even possible, but suppose I have an array A and a mask m, and I use some function (e.g. min()) to find the index of an element in the masked function, is there a way to backtrack that element back to the original unmasked array?
In other words:
[~,i] = min(A(m)); % A is an array, m is a logical array mask
Now I want to find the index j such that A(j) is the same element as (A(m))(i)
Thanks,
0 commentaires
Réponse acceptée
KSSV
le 28 Juil 2020
Repalce the other elements in A with NaN other than mask.
B = A ;
B(~m) = NaN ;
[~,i] = min(B); % now the index will be of A
4 commentaires
Image Analyst
le 28 Juil 2020
Be aware that if the min pixel value in the masked array B occurs in more than one location, i will only give you the first location it encounters, not all of them.
Plus de réponses (1)
Image Analyst
le 28 Juil 2020
Here is a way to find out where all the min values within the masked region occur in your original masked image.
% Create a small image.
grayImage = uint8(randi(9, 20, 20))
% Create a mask that's true from rows 5-15 and columns 2-18.
mask = false(size(grayImage));
mask(5:15, 2:18) = true
% Mask the image.
maskedImage = grayImage .* uint8(mask) % Erase outside the mask.
% Get the min value of grayImage within the mask:
minValue = min(maskedImage(mask))
% Find all the rows and columns where this occurs
occurrenceMap = (maskedImage == minValue) .* mask % An image
[rows, columns] = find(occurrenceMap) % An N-by-2 list of all row,column combinations where the min occurs
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices 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!