What is the actual ratio of color channels used in function rgb2gray?

조회 수: 3 (최근 30일)
I was curious to know the actual ratio of color channels used in rgb2gray function. The documentation mentioned about the ratio used in the function i.e.
(0.298936021293775 * R + 0.587043074451121 * G + 0.114020904255103 * B)
(0.299 * R + 0.587 * G + 0.114 * B)
To confirm it I wrote a script. Two gray image histogram are compared where one gray image is generated using inbuilt rgb2gray function and other gray image is generated using the mentioned ratio of color channels.
path = "OG/550_img_.png";
img = imread(path);
gray1 = rgb2gray(img);
gray2 = 0.298936021293775 * img(:,:,1) ...
+ 0.587043074451121 * img(:,:,2) ...
+ 0.114020904255103 * img(:,:,3) ;
plot(imhist(gray1),color='r');
hold on;
plot(imhist(gray2),Color='b');
As you can can see from the figure the histogram is not matching. So what is the actual ratio used by rgb2gray function?

채택된 답변

Constantino Carlos Reyes-Aldasoro
이동: Cris LaPierre 2025년 4월 23일
This is interesting, it looks like rgb2gray is rounding or filtering in some way.
  댓글 수: 1
Abinas
Abinas 2025년 4월 23일
이동: Cris LaPierre 2025년 4월 23일
You are right. I tried the following.
path = "OG/550_img_.png";
img = imread(path);
gray1 = rgb2gray(img);
img = im2double(img); % new
gray2 = 0.298936021293775 * img(:,:,1) ...
+ 0.587043074451121 * img(:,:,2) ...
+ 0.114020904255103 * img(:,:,3) ;
gray2 = im2uint8(gray2); % new
plot(imhist(gray1),color='r');
hold on;
plot(imhist(gray2),Color='b');
And now the histogram matches exactly. Thank you.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by