ImageProcessing-ElectronicPublications / scantailor-experimental

Scan Tailor Experimental is an interactive post-processing tool for scanned pages.
https://github.com/Tulon/scantailor/tree/experimental
GNU General Public License v3.0
30 stars 0 forks source link

feature: IntegralImage: max size. #23

Open zvezdochiot opened 6 months ago

zvezdochiot commented 6 months ago

Hi all, @plzombie , @noobie-iv ,...

Есть мнение ограничить максимальный размер IntegralImage неким значением (каким? обсуждаемо.) в операциях порога и цветных фильтрах. При больших изображениях генерировать интегральные изображения по кратковременным уменьшенным в q раз изображениям.

    unsigned long int size_orig = h * w;
    unsigned int q = 1;
    if (size_orig > size_max)
    {
        float qf = sqrt((float) size_orig / size_max);
        q = (int) qf;
        if (q < qf) q++;
    }
    wq = (w + q - 1) / q;
    hq = (h + q - 1) / q;

И обращаться к таким интегральным изображениям по простым образом квантованным индексам и размеру окна:

    IntegralImage<uint32_t> integral_image(wq, hq);
    IntegralImage<uint64_t> integral_sqimage(wq, hq);

    window_size_q = window_size / q;
...
    for (int y = 0; y < h; ++y)
    {
        int yq = y / q;
        for (int x = 0; x < w; ++x)
        {
            int xq = x / q;
...

Значения среднего и скв.отклонения станут приближёнными, но для большинства методов это приемлемо. Зато расход памяти станет строго ограничен, независимо от разрешения исходного изображения.

Остаётся только понять, как быстро и без заморочек произвести ресайз GrayImage по размерам (w,h)->(wq,hq).

zvezdochiot commented 5 months ago

Chungkwong Chan. Memory-efficient and fast implementation of local adaptive binarization methods.