1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.

Мой апскейлер. Оказывается, 320x200 - это не так уж мало.

Тема в разделе "Мастерская", создана пользователем bckpkol, 4 янв 2018.

Метки:
  1. bckpkol

    bckpkol

    Регистрация:
    18 мар 2011
    Сообщения:
    214
    У компьютеров тоже иногда бывает воображение. Ringing называется.
    sierra.png
    Код:
    import sys
    import matplotlib.pyplot as plt
    import numpy as np
    import cv2
    from scipy import fftpack,signal
    from PIL import Image
    def mgn(bar):
        return (bar.real**2+bar.imag**2)**.5
    im=Image.open(sys.argv[1])
    if im.mode != "RGB":
        im = im.convert("RGB")
    s=2
    ssq=s*s
    sh=s-1
    feather=np.array([[0,0,0,0,1],
                      [0,0,1,1,0],
                      [0,2,5,0,0],
                      [0,5,2,0,0],
                      [1,0,1,1,0],],dtype=np.float64)
    #feather=np.array([[0,1,2,],
    #                  [0,6,-1,],
    #                  [2,4,0,],],dtype=np.float64)
    feather/=feather.sum()
    #print(feather)
    def scale2(bar):
        ff=fftpack.fft2(bar)
        db=np.exp(np.min(np.log(ff)))
        ffl=np.log(ff)
        ffmn=cv2.GaussianBlur(mgn(ff),(15,15),0)/mgn(np.exp((np.mean(ffl)+np.max(ffl))/2))
        ff=np.exp(np.log(ff)-np.log(ffmn)/4)
        #print(bar.min(),bar.max())
        yo=(ff.shape[0])>>1
        xo=(ff.shape[1])>>1
        yl=ff.shape[0]
        xl=ff.shape[1]
        y=yl*sh
        x=xl*sh
        ff2=np.zeros((ff.shape[0]+y,ff.shape[1]+x),dtype=ff.dtype)
        ff2+=db
        ff2[:yo,:xo]=ff[:yo,:xo]*ssq
        ff2[-yo:,-xo:]=ff[-yo:,-xo:]*ssq
        ff2[:yo,-xo:]=ff[:yo,-xo:]*ssq
        ff2[-yo:,:xo]=ff[-yo:,:xo]*ssq
        iff=fftpack.ifft2(ff2).real
        iff[iff<0]=0
        iff[iff>254]=254
        iff=iff.astype(np.uint8)
        edges=cv2.Canny(iff,100,400).astype(np.float64)
        edges/=edges.max()/2
        edges-=1
        edges=edges*-63
        smooth=cv2.fastNlMeansDenoising(bar,None,10)
        residue=bar-smooth+128
        residue=signal.convolve(residue,feather,mode='same')-128
        residue*=1.4
        #plt.imshow(residue+smooth,cmap='gray')
        #plt.show()
        ff3=fftpack.fft2(smooth+residue)
        return ff3,edges
    def scale2foo(bar,ff,edges):
        yo=(ff.shape[0])>>1
        xo=(ff.shape[1])>>1
        ff3=fftpack.fft2(edges)
        ff3[:yo,:xo]=ff[:yo,:xo]*ssq
        ff3[-yo:,-xo:]=ff[-yo:,-xo:]*ssq
        ff3[:yo,-xo:]=ff[:yo,-xo:]*ssq
        ff3[-yo:,:xo]=ff[-yo:,:xo]*ssq
        #plt.imshow(mgn(np.log(ff3)),cmap='gray')
        #plt.show()
        iff2=fftpack.ifft2(ff3).real
        #print(iff2.min(),iff2.max())
        iff2[iff2<0]=0
        iff2[iff2>254]=254
        iff2=iff2.astype(np.uint8)
        return iff2
    def scale2bar(bar,em=1,bl=3):
        r,rr=scale2(bar[:,:,0])
        g,gg=scale2(bar[:,:,1])
        b,bb=scale2(bar[:,:,2])
        ee=((rr+gg+bb)/3+127).astype(np.uint8)
        ee=cv2.GaussianBlur(ee,(bl,bl),0)
        ee=cv2.fastNlMeansDenoising(ee,None,5)
        ee=ee.astype(np.float64)-127
        ee*=em
        #plt.imshow(ee,cmap='gray')
        #plt.show()
        R=scale2foo(bar[:,:,0],r,ee)
        G=scale2foo(bar[:,:,1],g,ee)
        B=scale2foo(bar[:,:,2],b,ee)
        return np.dstack((R,G,B))
    def scale2rgb(im,em=1,bl=3):
        data=scale2bar(np.array(im, dtype=np.uint8),em,bl)
        rgb_im=Image.fromarray(data,mode='RGB')
        return rgb_im
    #plt.imshow(scale2rgb(scale2rgb(im),1,5))#edges#mgn(np.log(ff3))
    #plt.show()
    scale2rgb(scale2rgb(im),1,5).save(sys.argv[2])
    Лицензию спрашивайте у авторов библиотек, я на то, что написал, прав не имею. Как говорится "no warranty of fitness for a particular purpose" или как там.
     
    SAS, real vision, AndyFox и 3 другим нравится это.
  2.  
  3. VladimIr V Y Анимешник/Ретроманьяк

    VladimIr V Y

    Регистрация:
    27 май 2006
    Сообщения:
    8.610
    Не вижу преимуществ перед hq2x и выше. Артефактов полно, как в сильно пожатом jpg.
     
    SSW85, Лорд Лотар и Birm нравится это.
  4. igor_pavlov

    igor_pavlov

    Регистрация:
    8 апр 2012
    Сообщения:
    50
    @bckpkol, можно оригинал картинки? Хочу с другими алгоритмами сравнить.
     
  5. al_exquemelin

    al_exquemelin

    Регистрация:
    12 окт 2017
    Сообщения:
    314
    На импрессионистов получилось похоже. Тоже интересно посмотреть на оригинал.
     
  6. daemolisher

    daemolisher

    Регистрация:
    2 дек 2009
    Сообщения:
    1.704
    Имхо, весьма приятное изображение :good:
     
  7. MisterGrim Very old

    MisterGrim

    Супер-модератор

    Регистрация:
    29 ноя 2007
    Сообщения:
    24.932
    awww.mobygames.com_images_shots_l_581047_king_s_quest_v_absenc483b68019bcd20c4d8ef35453589d824.png
    --- добавлено 4 янв 2018, предыдущее сообщение размещено: 4 янв 2018 ---
    На шейдерах бы это переписать.
     
  8. igor_pavlov

    igor_pavlov

    Регистрация:
    8 апр 2012
    Сообщения:
    50
    @MisterGrim, оригинал меньшего размера.
     
  9. VladimIr V Y Анимешник/Ретроманьяк

    VladimIr V Y

    Регистрация:
    27 май 2006
    Сообщения:
    8.610
    Как обычно, мелкие детали размазались. Черепица на крышах перестала выглядеть как черепица и превратилась в цветную массу.
     
  10. MisterGrim Very old

    MisterGrim

    Супер-модератор

    Регистрация:
    29 ноя 2007
    Сообщения:
    24.932
    @igor_pavlov, ну не 1:1 же 320×200 выкладывать.
     
  11. R4kk00n Benched arcade playa

    R4kk00n

    Модератор

    Регистрация:
    28 мар 2005
    Сообщения:
    8.405
    AFAIK на шейдерах Gaussian blur довольно дорого обходится
     
  12. MisterGrim Very old

    MisterGrim

    Супер-модератор

    Регистрация:
    29 ноя 2007
    Сообщения:
    24.932
    @R4kk00n, так он и на CPU дорого обходится.
     
  13. bckpkol

    bckpkol

    Регистрация:
    18 мар 2011
    Сообщения:
    214
    Спасибо за интерес. Тут не только Гаусс, тут ещё Кэнни, FFT2d и Non-Local Means Smoothing. Апскейлер принимает два параметра, em и bl.
     
  14. Дарк Шнайдер Недопустимо инфантилен

    Дарк Шнайдер

    Регистрация:
    18 окт 2004
    Сообщения:
    20.675
    Неплохо бы в движении всё это увидеть :)
     
  15. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    5.733
    waifu2x-caffe:
    CUT
    на ядрах CUDA гф970 оно заняло 0.699 сек. на и5 2500, при загрузки ЦП во время выполнения 50-80%, оно же заняло 9.520 сек.

    и ещё вариант по глаже:
    CUT
     
    Последнее редактирование: 5 янв 2018
    bckpkol и Jurgen Krace нравится это.
  16. Birm

    Birm

    Регистрация:
    11 июн 2010
    Сообщения:
    1.893
    Порнография.
     
  17. Guyver

    Guyver

    Регистрация:
    2 окт 2005
    Сообщения:
    4.958
    Кирандию изнасиловал и бросил, решил теперь апскейлерам святотатство устроить? Ты бессмертный, что ли?
     
  18. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    709
    Мне одному приятнее смотреть на огромные пиксели, чем на любой апскеил?
     
    drugon, nop, Dimouse и 5 другим нравится это.
  19. R4kk00n Benched arcade playa

    R4kk00n

    Модератор

    Регистрация:
    28 мар 2005
    Сообщения:
    8.405
    @Zelya, нет, это довольно распространённая сексуальная девиация
     
    Grue13, Birm и Jurgen Krace нравится это.
  20. bckpkol

    bckpkol

    Регистрация:
    18 мар 2011
    Сообщения:
    214
    Здорово. Мой тут и близко не стоял. Но тема называется "320x200 не так уж мало". Что Ogr 2 доказал.
     
  21. Grue13 манул

    Grue13

    Регистрация:
    26 апр 2006
    Сообщения:
    8.191
    А что, мне вроде бы нравится. Хотя по одному кадру сложно судить.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление