HSV Averages and SD for Image Processing Toolbox

17 views (last 30 days)
I am new to Matlab, it is only my first week. I am trying to calculate the average hue across all image pixels along with the standard deviation. Same applies to saturation and value.
My code is:
rgbImage = imread('001.jpg');
hsv = rgb2hsv(rgbImage);
h = hsv(:, :, 1); % Hue image.
s = hsv(:, :, 2); % Saturation image.
v = hsv(:, :, 3); % Value (intensity) image.
meanh = mean(h);
display(meanh)
My output shows columns, but I am seeking the average across all image pixels and to my understanding it seems like the table (for mean) shows average hue per pixel.

Accepted Answer

Guillaume
Guillaume on 30 Apr 2020
Edited: Guillaume on 30 Apr 2020
mean like many functions in matlab operates along the first non-scalar dimension of a matrix. Your h is a 2D matrix, so the first non-scalar dimension is the rows and mean gives you the average across the rows (hence the average of each column).
If you're using a reasonably modern version of matlab (2018b or later) you can tell mean to operate across all the dimensions at once:
meanh = mean(h, 'all');
In older versions, you can either call mean twice:
meanh = mean(mean(h)); %first get the mean across the rows, then across the columns
but be careful that it doesn't work for non-linear functions such as std. Instead you can reshape your matrix so it has only one dimension:
meanh = mean(h(:)); %reshape into a column, then take the mean
or use the mean2 function which gives you the mean of all pixels of a 2D image:
meanh = mean2(h);
I recommend the first ('all' option) or 3rd option ( use (:)) for older versions.

More Answers (0)

Categories

Find more on Modify Image Colors 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!