removing background of the color picture

5 visualizaciones (últimos 30 días)
Malini Bakthavatchalam
Malini Bakthavatchalam el 3 de Mayo de 2020
Comentada: Malini Bakthavatchalam el 3 de Mayo de 2020
Hi, i am working on a project, were I have to calculate the pixels inside the object only, my image contains a human face and a white background, all I want to do is to remove the background and save only the face of the person and calculate histograms from the face pixels only for my project. I have tried a thresholding method, so that kind of removes background and gives a black color as background. And i have used imwrite function to save the image and use it for further analysis. but the problem, I am not sure whether I am calculating only from the face pixels or the entire image including black as background. I am attaching my code here. kindly help me clear my doubt
%%threshold the image
I = imread('facergbimg.jpg');
imshow(I)
[BW rgb]= createMaskbcgremoval(I); this is a bckground removal code done with the use of image proccessing color threshold from the math works.
figure,imshow(rgb)
imwrite(rgb,'file.jpg')
% % save the image in a folder
% % work with the background removal image working only with face pixels
% % separate image into 3 channels
img = imread('file.jpg'); % Read image
red = img(:,:,1); % Red channel
green = img(:,:,2); % Green channel
blue = img(:,:,3); % Blue channel
a = zeros(size(img, 1), size(img, 2));
just_red = cat(3, red, a, a);
just_green = cat(3, a, green, a);
just_blue = cat(3, a, a, blue);
back_to_original_img = cat(3, red, green, blue);
figure, imshow(img), title('Original image')
figure, imshow(just_red), title('Red channel'),imwrite(just_red,'just_red.jpg')
figure, imshow(just_green), title('Green channel'),imwrite(just_green,'just_green.jpg')
figure, imshow(just_blue), title('Blue channel'),imwrite(just_blue,'just_blue.jpg')
%% now split the histogram
G =imread('just_green.jpg');
K_median_cal= reshape(G,[],1);
total_median = mean(K_median_cal);
K(G<total_median) = G(G<total_median);
P(G>total_median) = G(G>total_median);
K = uint8(double(total_median) .* ones(size(G)));
P = uint8(double(total_median) .* ones(size(G)));
for i=1:length(G(:,1))
for j=1:length(G(1,:))
if G(i,j)<total_median
K(i,j)=G(i,j);
else
P(i,j)=G(i,j);
end
end
end
figure(1)
imshow(G)
figure(2)
imshow(K)
title('lowerrectified');
figure(3)
imshow(P)
title('upper rectified');
figure(4)
imhist(G)
figure(5)
imhist(K)
ylim([0 10000])
figure(6)
imhist(P)
ylim([0 10000])

Respuesta aceptada

Image Analyst
Image Analyst el 3 de Mayo de 2020
"whether I am calculating only from the face pixels or the entire image including black as background." <== you are calculating total_median from G, which is the green channel of the background-removed image that you wrote to disk. I must say though that it looks like a very roundabout way of coding, like why write the rgb matrix out to disk only to read it back in as img? Etc.
  3 comentarios
Image Analyst
Image Analyst el 3 de Mayo de 2020
Not sure what you want but to compute the median of each color channel, you'd do this:
medianR = median(red);
medianG = median(green);
medianB = median(blue);
I can't figure out how you're computing total_median or what it even means.
And I don't know exactly what "see how the transmittion is happening from black to each color channel" means. Do you want code to zoom in to see the black-to-colored region in more detail? If so, see the attached zooming demo.
Malini Bakthavatchalam
Malini Bakthavatchalam el 3 de Mayo de 2020
hi professor,
I think I wasnt clear enough , all i want to do, for example take a green channel find the median (for ex if the median of the image histogram is 214, i need to split the histogram into half below 214 and above 214 and create the image with the values less than 214(lower rectified image) and above 214(upper rectified image). i want to know how the less than median and above the median value image looks like ..
so for that this formula is the optimization formula .
K(G<total_median) = G(G<total_median);- create image with this
P(G>total_median) = G(G>total_median);& create an image with this. so by the end of it i should have three images one is the original and other two are lower and higher rectified images. this is for an color illusion study.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by