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

1 次查看(过去 30 天)
Noted. i need to remove the out side area
  2 个评论
Image Analyst
Image Analyst 2016-7-30
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.

请先登录,再进行评论。

采纳的回答

Image Analyst
Image Analyst 2016-7-30
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 个评论
Image Analyst
Image Analyst 2016-7-31
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by