How to calculate the dynamic range of an RGB image

9 ビュー (過去 30 日間)
Avi Patani
Avi Patani 2020 年 3 月 5 日
編集済み: DGM 2022 年 11 月 28 日
This is the code I am using to cal. the DR of an RGB image, I divide the n*m*3 image into R,G,B components and go from there. I understand that the min value could be zero and I can set it take all the values >=2 (or 2 in case of a lower value).
But the code is doing something unexpected and I am not sure where I am going wrong.
Thank you
% Cal. the luminance value of the frame
I4 = 0.2126*R(:,:)+ 0.7152*G(:,:)+ 0.0722*B(:,:);
% Find the max and min value
Max = max(I4,[],'all');
Min = min(I4,[],'all');
% Cal the log2() values
LogMax = log2(Max);
LogMin = log2(Min);
DR = LogMax - LogMin;

回答 (1 件)

DGM 2022 年 11 月 27 日
The error occurs because you're trying to do everything with integer data.
% read an image
inpict = imread('peppers.png');
inpict = im2double(inpict); % cast to a non-integer class
% split channels
[R G B] = imsplit(inpict);
% Cal. the BT709 luma value of the frame
Y = 0.2126*R + 0.7152*G + 0.0722*B;
% Find the max and min value
ymax = max(Y,[],'all');
ymin = min(Y,[],'all');
% Cal the log2() values
LogMax = log2(ymax);
LogMin = log2(ymin);
% dynamic range of luma
DRy = LogMax - LogMin
DRy = 5.1004
  3 件のコメント
DGM 2022 年 11 月 28 日
編集済み: DGM 2022 年 11 月 28 日
I should mention that I have no idea if the actual DR calculations are correct. I doubt it. I don't know why you'd calculate from luma. I just jumped at the obvious error.
EDIT: eh.





Community Treasure Hunt

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

Start Hunting!

Translated by