Retrieve original index from a masked array
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Raphael Alhadef
el 28 de Jul. de 2020
Comentada: Raphael Alhadef
el 30 de Jul. de 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 comentarios
Respuesta aceptada
KSSV
el 28 de Jul. de 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 comentarios
Image Analyst
el 28 de Jul. de 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.
Más respuestas (1)
Image Analyst
el 28 de Jul. de 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
Ver también
Categorías
Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!