Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Эквализация гистограммы из double

Сижу, голову ломаю. Похоже, простейший способ — преобразовать данные в целые (до 65535 уровней) и работать с ними... Все равно при результирующем отображении данные будут передискретизированны.
Велосипедостроение продолжается. Библиотечка постепенно обрастает разными функциями.
UPD:
"Как надо" получается уродливо, сделал несколько иначе:

doubleimage *dbl_histeq(doubleimage *im, size_t nlevls){
    if(!im || !im->data) return NULL;
    double success = TRUE;
    histogram *hist = dbl2histogram(im, nlevls);
    if(!hist || !hist->data || !hist->levels){
        success = FALSE;
        goto theret;
    }
    double *newlevels = MALLOC(double, nlevls+1);
    size_t cumul = 0;
    for(size_t i = 0; i < nlevls; ++i){
        cumul += hist->data[i];
        // calculate new gray level
        newlevels[i+1] = ((double)cumul) / hist->totpix;
        DBG("newlevels[%zd]=%g", i+1, newlevels[i+1]);
    }
    // now we can change image values due to new level
    OMP_FOR()
    for(size_t i = 0; i < im->totpix; ++i){
        double d = im->data[i];
        double dnl = d * nlevls;
        size_t v = (size_t)dnl;
        if(v >= nlevls){
            v = nlevls-1;
        }
        double frac = dnl - v;
        if(frac < 0.){
            DBG("frac=%g<0", frac);
            frac = 0.;
        }else if(frac > 1.){
            DBG("frac=%g>1", frac);
            frac = 1;
        }
        im->data[i] = (newlevels[v+1] - newlevels[v]) * frac + newlevels[v];
    }
    FREE(newlevels);
    theret:
    histogram_free(&hist);
    if(success) return im;
    else return NULL;
}
Tags: всячина, рукожопие
Subscribe

  • Хеши строковых команд для МК

    Долго я к этому шел, но, похоже, пора уже: однобуквенные команды сложно запоминать (особенно если команд толпа, и большая часть с этими буквами…

  • OBS studio

    В общем, надоумили меня попробовать трансляцию в youtube. Напрямую скринкасты он писать не умеет, но может забирать поток с промежуточного…

  • M$ teams…

    Начал с сегодняшнего дня студентам ЮФУ удаленно лекции читать. У них все завязано на различные корпорации зла. И базовая работа - через teams. ОК,…

promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 4 comments