Got Questions? Get Answers.
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:
Help showing updated image

Subject: Help showing updated image

From: Student

Date: 7 Apr, 2012 11:38:12

Message: 1 of 2

Hi,
I am trying to change the pixel value of any blob in the image with an area above 95 to the new value of 254(white). My code can be seen below. I saved the pixel values of any blob with an area above 95 to the variable TooBig. When I manually go in and check the variable TooBig all values are 254 so the code is actualy working. The problem I have is when I try to display the updated image with all the blobs larger than 95 being blanked out. It seems to be plotting the original image without the changes to the larger blobs.
Can anyone help me with this?



length_Measurements = length(Measurements);

for k = 1 : length_Measurements
    
    if Measurements(k,1).Area >95;
        TooBig = Measurements(k,1).PixelValues;
                  
    end
    
end

length_TooBig = length(TooBig)

for k = 1 : length_TooBig
    
    TooBig(k,1)=254;
    OriginalImage(TooBig);
end


figure,imshow(OriginalImage)

Subject: Help showing updated image

From: ImageAnalyst

Date: 7 Apr, 2012 14:40:14

Message: 2 of 2

That is a very "non-MATLAB" way of doing it. Please look over this
demo and see how you use ismember to select objects bigger than 95
pixels, and how you use just normal indexing/assignment to set all
those objects to 254 in a single line of code. This is an adaptation
of my Image Segmentation tutorial at my File Exchange:
http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862

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


clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures.
clear; % Erase all existing variables.
workspace; % Make sure the workspace panel is showing.
fontSize = 20;

originalImage = propsSynthesizeImage;
subplot(2, 2, 1);
imshow(originalImage);
impixelinfo; % Allow cursor to show gray levels.
title('Synthetic Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);

% Threshold the image to get a binary image (only 0's and 1's) of
class "logical."
thresholdValue = 190;
binaryImage = originalImage > thresholdValue; % Bright objects will be
the chosen if you use >.
subplot(2, 2, 2);
imshow(binaryImage);
title('Binary Image', 'FontSize', fontSize);

% Label the image.
[labeledImage numberOfOriginalBlobs] = bwlabel(binaryImage, 8); %
Label each blob so we can make measurements of it

% Get all the blob properties. Can only pass in originalImage in
version R2008a and later.
blobMeasurements = regionprops(labeledImage, originalImage, 'all');

% Now I'll demonstrate how to select certain blobs based using the
ismember function.
% Let's say that we wanted to find only those blobs
% with an area greater than 95 pixels.
allBlobAreas = [blobMeasurements.Area];
% Get a list of the blobs that meet our criteria and we need to keep.
allowableAreaIndexes = allBlobAreas > 95; % Take the large objects.
keeperIndexes = find(allowableAreaIndexes);

% Extract only those blobs that meet our criteria, and
% eliminate those blobs that don't meet our criteria.
% Note how we use ismember() to do this.
keeperBlobsImage = ismember(labeledImage, keeperIndexes);
% Re-label with only the keeper blobs kept.
[areasGT95Image numberOfBlobs] = bwlabel(keeperBlobsImage, 8); %
Label each blob so we can make measurements of it
% Now we're done. We have a labeled image of blobs that meet our
specified criteria.
subplot(2, 2, 3);
% Convert the labeled image back to a binary image.
binary95 = areasGT95Image > 0;
imshow(binary95, []);
title('"Keeper" blobs larger than 95 pixels', 'FontSize', fontSize);

% Make those pixels have a value of 254 in the original image.
outputImage = originalImage; % Make a copy
outputImage(binary95) = 254; % Change the copy.
% Display the final output image.
subplot(2, 2, 4);
imshow(outputImage, []);
title('Original blobs larger than 95 pixels = 254', 'FontSize',
fontSize);

Tags for this Thread

No tags are associated with 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