Емельянов Эдуард Владимирович (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

  • Понаблюдал, блин!

    Опять у нас что-то с сетью поломали. Хотел было протестировать, как наша подвесная часть оптоволоконного спектрографа работает, а из дома связь с…

  • Релюшки на CAN-шине

    Закончил с прошивкой для новой железяки. Как "наследница" USB-CAN переходника, она умеет все то же самое + несколько специфичных вещей (опрос…

  • Дохлый SSD

    Писал уже о китайском SSD, сдохшем за полтора месяца работы. Вот он, герой: Сегодня у нас опять работы с оптоволоконным спектрографом на цейссе,…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 4 comments