MATLAB Answers

Mariam Sheha
0

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

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...

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

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

Thank you :)

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

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

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.. :)

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));

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

MATLAB Academy

New to MATLAB?

Learn MATLAB today!