# MATLAB: Extracting black pixels from a specific region of an image and overlaying it on another image

image editingimage overlayingimage processingImage Processing Toolboxmaskmaskingpixel extraction

I have a few images of the following nature (showing only 2 to exemplify; these are 2 separate images):
From these, I want to extract the central black image (the E or the Cross) and overlay it on other blank surfaces, like:
I cannot just extract the black pixels and overlay it, since the boundaries are also black. The size of all the images is same, 400x400x3, so, if I can get the exact pixels for the central black image (the E and the Cross), then I can just convert the corresponding pixels to black for the empty surfaces. So, is there an easy way of getting those pixels? Any help will be appreciated!

#### Best Answer

• Here's the full demo for you:
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 short g;format compact;fontSize = 25;%===============================================================================% Get the name of the image the user wants to use.baseFileName = 'o4s1_11.bmp';% Get the full filename, with path prepended.folder = pwdfullFileName = fullfile(folder, baseFileName);%===============================================================================% Read in a first image.grayImage1 = imread(fullFileName);% Get the dimensions of the image.% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.[rows, columns, numberOfColorChannels] = size(grayImage1)if numberOfColorChannels > 1  % It's not really gray scale like we expected - it's color.  % Use weighted sum of ALL channels to create a gray scale image.%   grayImage = rgb2gray(grayImage);  % ALTERNATE METHOD: Convert it to gray scale by taking only the green channel,  % which in a typical snapshot will be the least noisy channel.  grayImage1 = grayImage1(:, :, 2); % Take green channel.end% Display the image.subplot(2, 2, 1);imshow(grayImage1, []);axis on;axis image;caption = sprintf('Image1');title(caption, 'FontSize', fontSize, 'Interpreter', 'None');drawnow;hp = impixelinfo();% Set up figure properties:% Enlarge figure to full screen.set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, .96]);% 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;%===============================================================================% Read in a second image.fullFileName = fullfile(pwd, 'blankv5.bmp');grayImage2 = imread(fullFileName);% Get the dimensions of the image.% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.[rows, columns, numberOfColorChannels] = size(grayImage2)if numberOfColorChannels > 1  % It's not really gray scale like we expected - it's color.  % Use weighted sum of ALL channels to create a gray scale image.%   grayImage = rgb2gray(grayImage);  % ALTERNATE METHOD: Convert it to gray scale by taking only the green channel,  % which in a typical snapshot will be the least noisy channel.  grayImage2 = grayImage2(:, :, 2); % Take green channel.end% Display the image.subplot(2, 2, 2);imshow(grayImage2, []);axis on;axis image;caption = sprintf('Image2');title(caption, 'FontSize', fontSize, 'Interpreter', 'None');drawnow;hp = impixelinfo();% Display the histogram of the image so we can see what threshold to use.subplot(2, 2, 3);histogram(grayImage2);grid on;% Binarize the image.threshold = 128;binaryImage = grayImage1 < threshold;  % Determine number from histogram.% Get rid of surround that is touching the border.binaryImage = imclearborder(binaryImage);% Display the image.subplot(2, 2, 3);imshow(binaryImage, []);axis on;axis image;caption = sprintf('Binary Image');title(caption, 'FontSize', fontSize, 'Interpreter', 'None');drawnow;hp = impixelinfo();% Use this binary image to transfer the stuff in the second image.grayImage2(binaryImage) = grayImage1(binaryImage);% Display the image.subplot(2, 2, 4);imshow(grayImage2, []);axis on;axis image;caption = sprintf('Final Image');title(caption, 'FontSize', fontSize, 'Interpreter', 'None');drawnow;