Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to use "regionprops" function on true color image?!

Asked by Mariam Sheha on 14 Jun 2013

Hey Everybody, hope you are all doing well;

i am trying to get the Max and mean intensity through regionprops function using the following command:

CC = bwconncomp(Img.jpg);
Label2=labelmatrix (CC);
rgb_labeled=label2rgb(Label2);
imshow(rgb_labeled);

but receive the following Error message:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
??? Error using ==> iptcheckinput
Function LABEL2RGB expected its first input, L, to be two-dimensional.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Regarding that when i entered the image as and RGB or intensity (gray) image as an input for regionprops function, the following error displayed..

Error message:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
??? Error using ==> regionprops>getPropsFromInput at 1172
REGIONPROPS needs I as an input to calculate 'MaxIntensity'.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Waiting your help, thanks A lot...

4 Comments

Mariam Sheha on 14 Jun 2013

Dr. Walter Roberson; I am very thankful for always replaying my questions... :)

it's ok i know that the "bw" in the function name is hinting at "black and white but i found the above listed commands as method of labeling an RGB image so i thought that i have to convert it to double then back to rgb...

Thanks...

Walter Roberson on 22 Jun 2013

Oh, I'm not a doctor, but if you have some spare honorary degrees you might be able to persuade me to change that.

Mariam Sheha on 22 Jun 2013

if you are helping people,so you deserve it...

Thank you :)

Mariam Sheha

1 Answer

Answer by Image Analyst on 14 Jun 2013

You need to extract the color channels:

% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);

and then do regionprops on each color channel one at a time.

12 Comments

Mariam Sheha on 25 Jun 2013

Is that what you mean?!

Regarding that CR is segmented RGB image..

R=CR(:,:,1);

G=CR(:,:,2);

B=CR(:,:,3);

Rdata = regionprops(R,'MaxIntensity','MeanIntensity');

Gdata = regionprops(G,'MaxIntensity','MeanIntensity');

Bdata = regionprops(B,'MaxIntensity','MeanIntensity');

I tried that way but it , doesn't work

Thank you

Mariam Sheha on 25 Jun 2013

It's the sample image..

http://img515.imageshack.us/img515/7435/es8u.jpg

Thanks for informing me how to upload image..

Really I am Thankful for too much support u all do.. :)

Image Analyst on 25 Jun 2013

Miriam, again, you need to run regionprops() with a binary image. And if you want intensity info, you'll have to pass in the gray scale image also. Here, run this code and study what it does:

clc;    % Clear the command window.
close all;  % Close all figures (except those of imtool.)
imtool close all;  % Close all imtool figures if you have the Image Processing Toolbox.
clear;  % Erase all existing variables. Or clearvars if you want.
workspace;  % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
% Read in a standard MATLAB color demo image.
folder = 'D:\Temporary stuff';
baseFileName = 'es8u.jpg';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
	% Didn't find it there.  Check the search path for it.
	fullFileName = baseFileName; % No path this time.
	if ~exist(fullFileName, 'file')
		% Still didn't find it.  Alert user.
		errorMessage = sprintf('Error: %s does not exist.', fullFileName);
		uiwait(warndlg(errorMessage));
		return;
	end
end
rgbImage = imread(fullFileName);
% Get the dimensions of the image.  numberOfColorBands should be = 3.
[rows, columns, numberOfColorBands] = size(rgbImage);
% Display the original color image.
subplot(2, 3, 1);
imshow(rgbImage);
title('Original Color Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
% Display the color channels
subplot(2, 3, 4);
imshow(redChannel);
title('Red Channel Image', 'FontSize', fontSize);subplot(2, 3, 2);
subplot(2, 3, 5);
imshow(greenChannel);
title('Green Channel Image', 'FontSize', fontSize);subplot(2, 3, 2);
subplot(2, 3, 6);
imshow(blueChannel);
title('Blue Channel Image', 'FontSize', fontSize);
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(greenChannel);
% Suppress pure black so we can see the histogram.
pixelCount(1) = 0;
subplot(2, 3, 2); 
bar(pixelCount);
grid on;
title('Histogram of Green Channel', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
% Create a binary image
binaryImage = greenChannel > 13;
% Fill holes
binaryImage = imfill(binaryImage, 'holes');
% Get rid of small specks.
binaryImage = bwareaopen(binaryImage, 10000);
subplot(2, 3, 3);
imshow(binaryImage);
title('Binary Image', 'FontSize', fontSize);
% Get the mean of the red and blue channel 
% within the white pixels of the binary image using one method.
redMean = mean(redChannel(binaryImage))
blueMean = mean(blueChannel(binaryImage))
% Get the mean of the green channel 
% within the white pixels of the binary image using one method.
measurements = regionprops(binaryImage, greenChannel, 'MeanIntensity');
greenMean = measurements.MeanIntensity
message = sprintf('The mean red intensity = %.2f.\nThe green mean = %.2f.\nThe mean blue intensity = %.2f.',...
	redMean, greenMean, blueMean);
uiwait(helpdlg(message));
Image Analyst

Contact us