null or NaN entries in image arrays?
Show older comments
Is it possible to set some elements in animage array to null or in some way that they are ignored?
I have an automatically detected circular ROI outside of which is to be ignored (those values will skew the results) and need to step through the array using a for loop. Obviously a for loop can only step in rectangles so is there any way I can set an element in that image array to null or NaN that is acceptable?
Regards
Tim
4 Comments
Manikanta Aditya
on 13 Nov 2024
Yes, you can set elements in an image array to NaN to effectively ignore them in your calculations.
- Create a mask for the circular ROI.
- Apply the mask to the image array to set the values outside the ROI to NaN.
Tim
on 13 Nov 2024
Manikanta Aditya
on 13 Nov 2024
Yes, you can programmatically set elements in an image array to NaN to ignore them in your calculations.
DGM
on 13 Nov 2024
What is the actual applied operation? Does it actually require a loop, or can it be done with basic logical indexing?
Accepted Answer
More Answers (3)
Walter Roberson
on 13 Nov 2024
Edited: Walter Roberson
on 13 Nov 2024
The trick is that if your image array is not datatype single() or double(), then there is no way to set locations to be ignored as part of the same array
You can, however,
Imd = im2double(YourImageArray);
Imd(AppropriateLocations) = nan;
This will not in itself cause locations to be skipped. For example if you have
for ROW = 1 : size(YourImageArray,1)
for COL = 1 : size(YourImageArray,2)
do something with Imd(ROW,COL)
end
end
then this code in itself will not skip the locations that are NaN. You would need
for ROW = 1 : size(YourImageArray,1)
for COL = 1 : size(YourImageArray,2)
if ~isnan(Imd(ROW,COL))
do something with Imd(ROW,COL)
end
end
end
but if you are going to do that then you might as well use
for ROW = 1 : size(YourImageArray,1)
for COL = 1 : size(YourImageArray,2)
if YourImageMask(ROW,COL)
do something with YourImageArray(ROW,COL)
end
end
end
If your images are stored in an integer data type, assigning a NaN value into that array will store a 0 in that location. There is no equivalent of a NaN value in the integer types; all the possible bit patterns that can be stored in that type represent finite values.
A = int16(magic(3))
A(3, 3) = NaN % 2 replaced by 0 not NaN
B = uint32(magic(4))
B(2, 4) = NaN % 8 replaced by 0 not NaN
Tim
on 14 Nov 2024
0 votes
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!