MATLAB: Crop dark area and display the face only

cropface dark_area

i want to crop the dark area in the image and display the face only without the dark area

Best Answer

Convert to grayscale and then threshold and find the bounding box
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. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
% Read in the color image.
folder = pwd;
baseFileName = 'm2.bmp';
% 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, []);
axis on;
title('Original Color Image', 'FontSize', fontSize);
drawnow;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Histogram the red channel, but there is a huge spike at 255 so let's not count those.
subplot(2, 3, 2);
grayImage = rgb2gray(rgbImage);
imshow(grayImage, []);
title('Gray Scale version', 'FontSize', fontSize);
subplot(2, 3, 3);
histogram(grayImage(grayImage<255))
grid on;
title('Histogram of Gray Scale Image', 'FontSize', fontSize);
someThresholdValue = 150;
binaryImage = grayImage > someThresholdValue;
% Take largest blob
binaryImage = bwareafilt(binaryImage, 1);
subplot(2, 3, 4);
imshow(binaryImage);
grid on;
title('Binary Image', 'FontSize', fontSize);
% Label the binary image.
labeledImage = bwlabel(binaryImage);
props = regionprops(labeledImage, 'BoundingBox');
bbox = props.BoundingBox
croppedImageRGB = imcrop(rgbImage, bbox);
subplot(2, 3, 5);
imshow(croppedImageRGB);
grid on;
title('Cropped RGB Image', 'FontSize', fontSize);
% Gray scale version of cropped image
croppedImageGray = imcrop(grayImage, bbox);
subplot(2, 3, 6);
imshow(croppedImageGray);
grid on;
title('Cropped Gray Scale Image', 'FontSize', fontSize);