قصد داریم با این تحلیل متوجه بشیم تصویر ووردی چه میزان پخش شدن سطوح خاکستری را در تصویر بررسی کنیم مقدار مناسب به این صورت هستش که dynamic range تصویر 256 باشه تعداد حاکثر بیت ها در تصویر خاکستری 8 بیت هستش که مقدار 6 بیت حداقل تعداد بیتی هستش که می تونه مورد قبول باشه از این کمتر باشه باید تصویر رد شه.با اینکار تصویر می تونیم تصاویر پور نور یا کم نور را تشخیص بدیم.
برای محاسبه آن بایستی آنتروپی تصویر را محاسبه کنیم. برای محاسبه entropy در ابتدا از تصویر هیستوگرام می گیریم سپس PMF هیستوگرام را محاسبه می کنیم. سپس برای هر Bin مقدار Pi*log(Pi) را محاسبه می کنیم و مجموع آن را برای کل bin ها محاسبه می کنیم که این مجموع بایستی بزرگتر مساوی 6 باشد.
در واقع این روش بررسی میزان کنتراست تصویر ورودی هستش. به صورت زیر:
void bhGet1DHistogram(InputArray _src, MatND &hist, int size, InputArray _mask)
{
int hist_size[] = { size };
float ranges1[] = { 0, float(size - 1) };
const float* ranges[] = { ranges1 };
int channels[] = { 0 };
Mat src = _src.getMat();
calcHist(&src, 1, channels, _mask, hist, 1, hist_size, ranges);
}
int grayscaleUtilization_(InputArray _src, IrisContext* context){
Mat src = _src.getMat();
Mat hist;
bhGet1DHistogram(_src, hist, 256);
int total_pix = src.size().area();
int count = 0;
float H = 0.f;
for (size_t i = 0; i < hist.size.p[0]; i++){
float val = hist.at<float>(i) / total_pix;
if (val > 0){
H += val * log2(val);
}
}
return -H;
}