change picture into grayscale and keep the luminace...same

6 views (last 30 days)
Hi guys.I have some color face pictures with white background.I want to convert them to grayscale,match them for luminance and contrast and bring them into an oval shape to remove hair, neck, and background information and then present on a light grey background.How can i do that? Thanks!

Accepted Answer

Image Analyst
Image Analyst on 23 Sep 2013
Your link doesn't work. Anyway, I'm not a psychologist but I don't think you want to do that. There is a concept called Color Constancy that says people are basically tolerant or immune to changes in color in situations like that. In other words, people will be able to discern the emotion of your subject in the photo regardless of whether the image is monochrome or color or brighter or darker. In essence they compensate for slight changes in color of the lighting or exposure level. In fact converting the images may make it more distracting. If you still want to, you can use rgb2gray()
% Define desired mean gray level
desiredMean = 128; % or whatever....
% Convert to monochrome.
grayImage = rgb2gray(rgbImage);
% Normalize to desired mean.
grayImage = uint8( double(grayImage) * desiredMean / mean2(grayImage));
imshow(grayImage);
There are more sophisticated histogram matching routines if you want, even some that work in color (e.g. Grundland and Dodgson)
  3 Comments
Image Analyst
Image Analyst on 23 Sep 2013
I didn't use any color map so I don't know why you tried to. rgbImage is the 3D color image like you'd get from imread():
rgbImage = imread('c:\folder\emotion image number 1.png');
I cast it to uint8 so that you could display it. I had cast it to double because it doesn't like uint8's multiplied by doubles. You can leave the uint8 out if you want but you'd just have to display it with [0 255], like:
imshow(grayImage, [0 255]);
If you ever want to write out the gray image to a disk file, you'd have to convert it to uint8 because that's what most imaging formats want.
Xu anbing
Xu anbing on 23 Sep 2013
Thanks.As totally a learner,I will type the codes into matlab to see the functions' meaning.

Sign in to comment.

More Answers (1)

Youssef  Khmou
Youssef Khmou on 23 Sep 2013
Xu,
the only contribution i can made here is that , as you have N samples, you have to normalize them, i mean after converting to Grayscale, for every sample you need to perform :
% after converting to double
N=(X-mean(mean(X)))/std(std(X));
I think the oval shape is related to Logarithm operator.
  1 Comment
Xu anbing
Xu anbing on 23 Sep 2013
Edited: Randy Souza on 24 Sep 2013
Thanks for help.I know little about image process.So maybe very simple for you ,but for me it's a problem.I'm designing one psychology experiment showing some emotion faces to subjects.But to keep some variables constant for subjects except the emotion.I need to achieve the standards expressed in my prior question. So I would be grateful if someone can write the relevant code for me. To show my intention clearly:

Sign in to comment.

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!