MATLAB Answers


carrying out simple functions on all cells within an array

Asked by Optical_Stress on 6 Apr 2017
Latest activity Commented on by Optical_Stress on 6 Apr 2017
Accepted Answer by Jan
I have a 5x1 cell containing 'images' (arrays of their intensities). I want to carry out a 'normalisation'. I want to divide the every array in the cell by a constant, this has been successful using:
Normalised_Cell=cellfun(@(v) v./N,B,'UniformOutput',false)
N is the largest value in the first array.
However, the arrays are returning 0 and not the decimal values. For example, If i have a maximum of 180 and the first cell contains 3 (or 50 or 100), the matrix will show 0 instead of 3/180. I suspect that this is due to the fact that the arrays in the cell are uint8. But i'm not sure how to go about fixing this.
I then want to square-root the values, and following that take the inverse sine.
Will cellfun suffice when applying inverse sin to these uint values?


Sign in to comment.

1 Answer

Answer by Jan
on 6 Apr 2017
Edited by Jan
on 6 Apr 2017
 Accepted Answer

Use double instead:
Normalised_Cell = cellfun(@(v) double(v) ./ double(N), B, 'UniformOutput', false)


Thanks, why has this done that? I would have expected my Uint8 matrix to do the same, since the values are still less than the Uint8 limit.
Try it:
uint8(3) / uint8(180)
This is smaller than 1 and the next possible value is uint8(0). For arithmetic operations it might be useful to convert all images by im2double at first.
Yeah, just read about uint8, makes a lot more sense now, thanks.

Sign in to comment.