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

Thread Subject:
Roifill help

Subject: Roifill help

From: Student

Date: 29 Feb, 2012 20:15:20

Message: 1 of 3

Hi,

I am using roifill to select areas of an image. I am looking to make all pixels in the area I have selected black. Is there a simple way of doing this as I am finding it very troublesome.

Thanks

Subject: Roifill help

From: Student

Date: 1 Mar, 2012 14:17:28

Message: 2 of 3

"Student " <slowlygoes@hotmail.com> wrote in message <jim10o$t6h$1@newscl01ah.mathworks.com>...
> Hi,
>
> I am using roifill to select areas of an image. I am looking to make all pixels in the area I have selected black. Is there a simple way of doing this as I am finding it very troublesome.
>
> Thanks

Any help or advice??

Subject: Roifill help

From: ImageAnalyst

Date: 1 Mar, 2012 20:52:11

Message: 3 of 3

On Mar 1, 9:17 am, "Student " <slowlyg...@hotmail.com> wrote:
> "Student " <slowlyg...@hotmail.com> wrote in message <jim10o$t6...@newscl01ah.mathworks.com>...
> > Hi,
>
> > I am using roifill to select areas of an image. I am looking to make all pixels in the area I have selected black. Is there a simple way of doing this as I am finding it very troublesome.
>
> > Thanks
>
> Any help or advice??

----------------------------------------------------------------------
See my demo. This is one of the things it does.

% Demo to have the user freehand draw an irregular shape over
% a gray scale image, have it extract only that part to a new image,
% and to calculate the mean intensity value of the image within that
shape.
% By ImageAnalyst
%
% IMPORTANT: The newsreader may break long lines into multiple lines.
% Be sure to join any long lines that got split into multiple single
lines.
% These can be found by the red lines on the left side of your
% text editor, which indicate syntax errors, or else just run the
% code and it will stop at the split lines with an error.

% Change the current folder to the folder of this m-file.
if(~isdeployed)
cd(fileparts(which(mfilename)));
end
clc; % Clear command window.
clear; % Delete all variables.
close all; % Close all figure windows except those created by imtool.
imtool close all; % Close all figure windows created by imtool.
workspace; % Make sure the workspace panel is showing.
fontSize = 16;

% Read in standard MATLAB gray scale demo image.
grayImage = imread('cameraman.tif');
% subplot(2, 3, 1);
imshow(grayImage, []);
axis on;
title('Original Grayscale Image', 'FontSize', fontSize);
set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.
message = sprintf('Left click and hold to begin drawing.\nSimply lift
the mouse button to finish');
uiwait(msgbox(message));
hFH = imfreehand();
% Create a binary image ("mask") from the ROI object.
binaryImage = hFH.createMask();

% Now make it smaller so we can show more images.
subplot(2, 3, 1);
imshow(grayImage, []);
axis on;
title('Original Grayscale Image', 'FontSize', fontSize);

% Display the freehand mask.
subplot(2, 3, 2);
imshow(binaryImage);
axis on;
title('Binary mask of the region', 'FontSize', fontSize);

% Label the binary image and computer the centroid and center of mass.
labeledImage = bwlabel(binaryImage);
measurements = regionprops(binaryImage, grayImage, ...
    'area', 'Centroid', 'WeightedCentroid');
area = measurements.Area
centroid = measurements.Centroid
centerOfMass = measurements.WeightedCentroid

% Calculate the area, in pixels, that they drew.
numberOfPixels1 = sum(binaryImage(:))
% Another way to calculate it that takes fractional pixels into
account.
numberOfPixels2 = bwarea(binaryImage)

% Get coordinates of the boundary of the freehand drawn region.
structBoundaries = bwboundaries(binaryImage);
xy=structBoundaries{1}; % Get n by 2 array of x,y coordinates.
x = xy(:, 2); % Columns.
y = xy(:, 1); % Rows.
subplot(2, 3, 1); % Plot over original image.
hold on; % Don't blow away the image.
plot(x, y, 'LineWidth', 2);

% Burn line into image by setting it to 255 wherever the mask is true.
burnedImage = grayImage;
burnedImage(binaryImage) = 255;
% Display the image with the mask "burned in."
subplot(2, 3, 3);
imshow(burnedImage);
axis on;
caption = sprintf('New image with\nmask burned into image');
title(caption, 'FontSize', fontSize);

% Mask the image and display it.
% Will keep only the part of the image that's inside the mask, zero
outside mask.
blackMaskedImage = grayImage;
blackMaskedImage(~binaryImage) = 0;
subplot(2, 3, 4);
imshow(blackMaskedImage);
axis on;
title('Masked Outside Region', 'FontSize', fontSize);
% Calculate the mean
meanGL = mean(blackMaskedImage(binaryImage));

% Put up crosses at the centriod and center of mass
hold on;
plot(centroid(1), centroid(2), 'r+', 'MarkerSize', 30, 'LineWidth',
2);
plot(centerOfMass(1), centerOfMass(2), 'g+', 'MarkerSize', 20,
'LineWidth', 2);

% Now do the same but blacken inside the region.
insideMasked = grayImage;
insideMasked(binaryImage) = 0;
subplot(2, 3, 5);
imshow(insideMasked);
axis on;
title('Masked Inside Region', 'FontSize', fontSize);

% Now crop the image.
leftColumn = min(x);
rightColumn = max(x);
topLine = min(y);
bottomLine = max(y);
width = rightColumn - leftColumn + 1;
height = bottomLine - topLine + 1;
croppedImage = imcrop(blackMaskedImage, [leftColumn, topLine, width,
height]);
% Display cropped image.
subplot(2, 3, 6);
imshow(croppedImage);
axis on;
title('Cropped Image', 'FontSize', fontSize);

% Put up crosses at the centriod and center of mass
hold on;
plot(centroid(1)-leftColumn, centroid(2)-topLine, 'r+', 'MarkerSize',
30, 'LineWidth', 2);
plot(centerOfMass(1)-leftColumn, centerOfMass(2)-topLine, 'g+',
'MarkerSize', 20, 'LineWidth', 2);

% Report results.
message = sprintf('Mean value within drawn area = %.3f\nNumber of
pixels = %d\nArea in pixels = %.2f\nCentroid at (x,y) = (%.1f, %.1f)
\nCenter of Mass at (x,y) = (%.1f, %.1f)\nRed crosshairs at centroid.
\nGreen crosshairs at center of mass.', ...
meanGL, numberOfPixels1, numberOfPixels2, ...
centroid(1), centroid(2), centerOfMass(1), centerOfMass(2));
msgbox(message);

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us