# Retrieve original index from a masked array

3 views (last 30 days)
Raphael Alhadef on 28 Jul 2020
Commented: Raphael Alhadef on 30 Jul 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,

KSSV on 28 Jul 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

Show 1 older comment
KSSV on 28 Jul 2020
Thanks is accepting/voting the answer.. ðŸ˜Š
Image Analyst on 28 Jul 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.
Raphael Alhadef on 30 Jul 2020
Yes, I also realized that this solution returns 1 if mask is all 0's which is an unintended consequence, but for my specific needs it works fine.
Thanks for the feedback!

Image Analyst on 28 Jul 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.
% Get the min value of grayImage within the mask:
% Find all the rows and columns where this occurs
[rows, columns] = find(occurrenceMap) % An N-by-2 list of all row,column combinations where the min occurs

#### 1 Comment

Raphael Alhadef on 30 Jul 2020
Thanks! This is the original solution I thought of but it is a bit slower and I was looking for something faster.

R2018b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!