File Exchange

image thumbnail

Mat2gray variant with dimension option

version 1.4 (2.54 KB) by

Normalizes sections of an N-D matrix divided along DIM to the 0.0-1.0 range.



View License

Similar to mat2gray. Except dim2gray allows user to specify a dimension DIM that will determine the limits used to normalize values in that dimension.
In contrast, mat2gray scales all values in A based on 2 values (min and max by default).

I found it useful for normalizing RGB/HSV images per color channel in 1 short command, but tried to make it so it accepts N-D matrices.

from the help:
DIM2GRAY - Normalize N-dimensional array along a specified dimension.
Normalizes (i.e. scales values) in matrix A along the dimension DIM
B has type double or single in the 0-1 range, and is the same size as A.
DIM is an integer scalar--A is 'sliced' along DIM.
LIMS, optional, is a Nx2 vector of limits--where N == size(A,DIM).
It specifies limits per dimensional slice, similar to mat2gray(A,LIMS).
Usage without LIMS defaults to min-max, like mat2gray(A), only
dim2gray uses min-max limits per slice/chunk. Use NaN to specify a
min or max limit.

Example: an HSV image
A = imread('peppers.png');
A = rgb2hsv(A);
B = dim2gray(A,3)

Will linearly normalize every color plane to 0.0 & 1.0 based on the min
and max *per channel*. Equivalent to:
B = cat(3,mat2gray(A(:,:,1)),mat2gray(A(:,:,2)),mat2gray(A(:,:,3)));

%This clips range at .1 and .9:
C = dim2gray(A,3,[0.1 0.9;0.1 0.9;0.1 0.9])

Example: Multiple measurements of signal(e.g. voltage) over time
Let every row be a measurement(5) and every column a timepoint(32).
DATA = rand(5,32);
dim2gray(DATA,2); %normalize every measurement to 0-1 range
dim2gray(DATA,1); %normalize every unique timepoint to 0-1 range

Hope it helps. Welcome feedback.

Comments and Ratings (2)


Jurgen (view profile)

Hi Lili, I don't think I understand. Can you give an example of what you mean?

Lili Johnson


It is a very useful app. I want to know how I can save each splitted images individually.

Best Regards,



Corrected bug in NaN handling for LIMS.


Something went wrong with previous edit, no change. New attemp.




Cleaned up code & comments. Added LIMS option.

MATLAB Release
MATLAB 7.6 (R2008a)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video