Hi, can any one help me here how to create a binary mask (automatically) remove the foreground information of the input image

3 views (last 30 days)
Noted. i need to remove the out side area
  2 Comments
Image Analyst
Image Analyst on 30 Jul 2016
Please attach the original image as a PNG file (or some standard image format), not as a .fig file. Then we can see it, download it, and work with it. Use the green and brown frame icon.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 30 Jul 2016
Try this for starters, and tweak as needed.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
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;
% Get the base filename.
baseFileName = 'segmented.jpg'; % Assign the one on the button that they clicked on.
% Get the full filename, with path prepended.
folder = pwd; % Current folder
fullFileName = fullfile(folder, baseFileName);
% Check if file exists.
if ~exist(fullFileName, 'file')
% File doesn't exist -- didn't find it there. Check the search path for it.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
% Read in image.
originalImage = imread(fullFileName);
% Get the dimensions of the image.
% numberOfColorBands should be = 1.
[rows, columns, numberOfColorBands] = size(originalImage);
if numberOfColorBands > 1
% It's not really gray scale like we expected - it's color.
% Convert it to gray scale by taking only the blue channel.
grayImage = min(originalImage, [], 3); % Take blue channel.
else
% It's already grayscale
grayImage = originalImage;
end
% Display the original image.
subplot(2, 3, 1);
imshow(originalImage);
axis on;
title('Original Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Display the original image.
subplot(2, 3, 2);
% Crop off white surround.
grayImage = grayImage(74:465, 430:851);
imshow(grayImage, []);
axis on;
title('Gray Scale Image', 'FontSize', fontSize, 'Interpreter', 'None');
drawnow;
hp = impixelinfo(); % Let user ouse around over image and get gray levels.
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
drawnow;
% Let's compute and display the histogram.
subplot(2, 3, 3);
histogram(grayImage);
xlim([0, 255]);
grid on;
title('Intensity Histogram of Gray Scale Image', 'FontSize', fontSize, 'Interpreter', 'None');
xlabel('Gray Level', 'FontSize', fontSize);
ylabel('Pixel Count', 'FontSize', fontSize);
% Need to get the background (light stuff) but not get any light stuff in the bottle.
% Threshold to find dark.
binaryImage = grayImage > 80 & grayImage < 160;
% Extract the largest blob only
binaryImage = bwareafilt(binaryImage, 1);
% Fill any holes.
% binaryImage = imfill(binaryImage, 'holes');
% Invert to get the holes.
binaryImage = ~binaryImage;
% Extract the two largest blobs
binaryImage = bwareafilt(binaryImage, 2);
% Display the binary image.
subplot(2, 3, 4);
imshow(binaryImage, []);
axis on;
title('Binary Background Image', 'FontSize', fontSize);
% Display the binary image.
subplot(2, 3, 5);
imshow(~binaryImage, []);
% Invert and remove blobs touching border.
binaryImage = imclearborder(~binaryImage, 4);
% Extract the largest blob
binaryImage = bwareafilt(binaryImage, 1);
% Display the binary image.
subplot(2, 3, 5);
imshow(binaryImage, []);
axis on;
title('Binary Background Image', 'FontSize', fontSize);
  3 Comments
Image Analyst
Image Analyst on 31 Jul 2016
Okay. I said it was just a start and that you could "tweak as needed". I already spent more time than usual on it and, sorry, but I just can't spend the additional time to finish it off and perfect it for you. It could take hours or days or weeks to get it working for all possible images that you might encounter. If you can't do it yourself, you might have to hire someone to do it. Hopefully what I've done so far was of value and points you in the right direction.

Sign in to comment.

More Answers (0)

Categories

Find more on Image Processing Toolbox 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!