Skip to content

no4ni/scaleSmooth

Repository files navigation

scaleSmooth

Algorithms for most-accurate upscaling images without AI and neural network


Русский язык (gray or color / smooth, sharpness, semi-sharpness, monochrome or bold / fast or accuracy variants available)



Free and Open Source Image Upscaler

scaleSmooth lets you enlarge and enhance low-resolution images (up to 234 megapixels, e.g. 20420x11486 for 16:9) with any integer scale factor using only math.
Enlarge images and get more quality without losing accuracy (in some cases, reverse adjustment is required) and hallucinations. It's just math!

scaleSmooth is a windows application on .NET 8.0 on Visual Studio C#, but we'll be glad, if you create your repository for other platforms and languages (write me and I'll attach link to your repository) or commit here updates for translations for other languages, optimization, batch, interface or more accuracy. If you want improve anything we'll be glad for pull request, if you disagree with something boldly fork to your own repository

Threshold, autoThreshold, Mean Curvatute Blur, Median Blur, adjustment by Lanczos, Antiringing and other tools, which can help you get more usefull results for your specific needs are NOT included!

🏃 Run

(required Windows 7?-10.0.19041+ x64, .NET 8.0+)

  • Download release
  • Extract
  • Run .exe

🛠 Using in your projects

  • Just copy necessary function and it's subfunctions (f.e. ScaleSmoothGray / ScaleSmoothColor / ScaleRoughGray and S255 / ScaleRoughColor and S255 / ScaleFurryGray and S255 / ScaleFurryColor and S255 / ContrastBoldScaleGray and S255f / ContrastBoldScaleColor and S255f / BoldScaleGray and S255f / BoldScaleColor and S255f / ScaleSeparateGray, Quadrilateral and Bilinear / ScaleSeparateColor, Quadrilateral and Bilinear / ScaleBilinearApproximationGray[GPU/Auto], Dist4 and Bilinear / ScaleBilinearApproximationColor[GPU/Auto], Dist4 and Bilinear) (for GPU version install and Using ILGPU and ILGPU.Algorithms nuget packets (desirable ver.1.5.1)) (you can harmless remove ProgressText from code)
  • Call it with parameters (image as type Image, int scale, int accuracy - where 0 is fast, 100 is accurate)
  • It returns new image as type Image

ℹ️ Description of methods

  • Smooth
    Most accurate for scenes where objects are completely in the image, but little bit blurred (much less than any interpolation) and grid structure is still visible
    Very fast - Slow, and you can process multiple images at the same time without losing speed (just run function in other thread or run .exe one more time)

  • SmoothContinuous
    Most accurate for scenes where objects extend beyond the boundaries of the image, but little bit blurred (much less than any interpolation) and grid structure is still visible
    Very fast - Slow, and you can process multiple images at the same time without losing speed (just run function in other thread or run .exe one more time)

  • SmoothContrast
    Very smooth, after reverse adjustment - most accurate for any scenes, but very contrast and grid structure is still visible
    Slow?, but you can process multiple images at the same time without losing speed (just run function in other thread or run .exe one more time)

  • Bold
    Grid structure, little bit noisy and contrasty (for accuracy, subsequent reverse correction is desirable) and too small details may lost
    Very fast - Very very slow, but you can process multiple images at the same time without losing speed

  • ContrastBold
    Perfect result, but too contrasty (for accuracy, subsequent reverse correction is required) and too small details are lost
    Very fast - Very very slow, but you can process multiple images at the same time without losing speed

  • Furry
    Beautiful and detailed result, but only if bigger version must be monochrome image (only pure black and white, or for color - only pure red, black, green, yellow, fuchsia, blue, cyan and white)
    Very slow - Very very slow, but you can process multiple images at the same time without losing speed

  • Rough
    Typographic raster stylization, but if bigger version must be monochrome image it gives acceptable upscaling
    Very slow, but you can process multiple images at the same time without losing speed

  • Separate
    Gives beatiful, but almost monochrome result and there are Gibbs ringing artifacts (to avoid you can try several times x2-x4)
    Very very fast - fast, but you can't process multiple images at the same time without losing speed

  • BA
    A clearly defined grid structure and may be present Gibbs ringing artifacts, but it's better than nearest neighbour
    Very very fast - Very slow, and you can't process multiple images at the same time without losing speed

  • BAContrast
    Defined grid structure, little contrasty and may be present Gibbs ringing artifacts
    Very very fast - Very slow, and you can't process multiple images at the same time without losing speed

  • BASmoothContrast
    Сontrasty and may be present grid structure
    Very very fast - Very slow, and you can't process multiple images at the same time without losing speed

  • BAmonochrome
    Smooth, curve and same time sharpness result, but monochrome (colors may be distorted)
    Very slow, and you can't process multiple images at the same time without losing speed

  • BAmonochrome2
    Sharpness edges, but colors may be distorted
    Very slow, and you can't process multiple images at the same time without losing speed

  • BAExtremum
    Sharpen edges, but contrasty (for accuracy required reverse adjustment) and many Gibbs ringing artifacts
    Very very fast - Very slow, and you can't process multiple images at the same time without losing speed

  • 255BA
    Vaguely, but not blurry, may need back(reverse) adjustment
    Very very slow and you can't process multiple images at once

  • Thin255BA
    Makes objects thinner and more colorful
    Very slow and you can't process multiple images at once

  • DerivativeBA
    Much Gibbs ringing afrtifacts in the grid structure, contrasty but sharp edges
    Very fast - Very slow and you can't process multiple images at once

  • SmoothCAS
    Smooth, clear, a little contrasty and the grid structure is visible, but accurate even without reverse correction
    Fast, and you can process multiple images at the same time without losing speed

  • AntiBicubic
    Sharp and there is no grid structure, but a bit noisy and a halo may be present
    Slow and you can't process multiple images at once

  • FastNearestNeighbour
    Grid only
    The fastest method, but you can't process multiple images at once without losing a lot of speed

You can increase speed instead of accuracy and vice versa



Алгоритмы для максимально точного масштабирования изображений без ИИ и нейронных сетей
Доступно множество различных вариантов (серый или цветной / гладкий, резкий, полурезкий, монохромный или жирный / быстрый или точный)

Мои эксперименты с изображениями
Объяснение принипа работы, визуализация и больше примеров и сравнений в видео FullHD: #1, #2
Теория и объяснение в тексте и картинках: #1, #2

Бесплатный и открытый исходный код для масштабирования изображений

scaleSmooth позволяет увеличивать и улучшать изображения с низким разрешением на любой целочисленный масштаб вплоть до 234 мегапикселей (например, 20420х11486 для 16:9), используя только математику.
Увеличивайте изображения и получайте больше качества без потери точности (в некоторых случаях требуется обратная корректировка) и галлюцинаций. Это просто математика!

scaleSmooth - это приложение Windows на .NET 8.0 на Visual Studio C#, но мы будем рады, если вы создадите свой репозиторий для других платформ и языков (напишите мне, и я прикреплю ссылку на ваш репозиторий) или закоммитите здесь обновления для переводов на другие языки, оптимизации, пакетной обработки, интерфейса или большей точности. Если вы хотите что-то улучшить, мы будем рады pull request, а если вы с чем-то не согласны, смело делайте fork в свой собственный репозиторий

Порог, Авто-порог, Размытие по средней кривизне, Медианный фильтр, Корректировка Ланцошем, Антизвон и другие инструменты, которые могут помочь вам получить более полезные результаты для ваших конкретных нужд, НЕ включены!

🏃 Запустить:
(требуется Windows 7?-10.0.19041+ x64, .NET 8.0+)

  • Загрузить релиз
  • Извлечь
  • Запустить .exe

🛠 Использование в ваших проектах

  1. Просто скопируйте необходимую функцию и ее подфункции (например, ScaleSmoothGray / ScaleSmoothColor / ScaleRoughGray и S255 / ScaleRoughColor и S255 / ScaleFurryGray и S255 / ScaleFurryColor и S255 / ContrastBoldScaleGray и S255f / ContrastBoldScaleColor и S255f / BoldScaleGray и S255f / BoldScaleColor и S255f / ScaleSeparateGray, Quadrilateral и Bilinear / ScaleSeparateColor, Quadrilateral и Bilinear / ScaleBilinearApproximationGray[GPU/Auto], Dist4 и Bilinear / ScaleBilinearApproximationColor[GPU/Auto], Dist4 и Bilinear) (для использования версии для видеокарт установите nuget пакеты ILGPU и ILGPU.Algorithms (желательно версии 1.5.1) и вставьте Using на них) (вы можете безвредно удалить ProgressText из кода)
  2. Вызовите функцию с параметрами (Image изображение, int масштаб, int точность - где 0 - быстро, 100 - точно)
  3. Функция вернёт Вам новое изображение (с повышенным разрешением) как тип Image

ℹ️ Описание методов

  • Smooth
    Наиболее точный метод для сцен, где объекты полностью находятся на изображении, но результат немного размыт (гораздо меньше, чем при любой интерполяции) и структура сетки все еще видна
    Очень быстро - Медленно, и вы можете обрабатывать несколько изображений одновременно, не теряя скорости (просто запустите функцию в другом потоке или запустите .exe еще раз)

  • SmoothContinuous
    Наиболее точный метод для сцен, где объекты выходят за границы изображения, но результат немного размыт (гораздо меньше, чем при любой интерполяции) и структура сетки все еще видна
    Очень быстро - Медленно, и вы можете обрабатывать несколько изображений одновременно, не теряя скорости (просто запустите функцию в другом потоке или запустите .exe еще раз)

  • SmoothContrast
    Очень плавно-гладко-размыто, но после обратной корректировки - наиболее точный для любых сцен, но очень контрастный и структура сетки кое-где все еще видна Медленно?, но вы можете обрабатывать несколько изображений одновременно, не теряя скорости (просто запустите функцию в другом потоке или запустите .exe еще раз)

  • Bold
    Сетчатая структура, немного шумно и контрастно (для точности желательно последующее обратная корректировка), и слишком мелкие детали могут быть потеряны
    Очень быстро - Очень очень медленно, но вы можете обрабатывать несколько изображений одновременно без потери скорости

  • ContrastBold
    Идеальный результат, но слишком контрастный (для точности требуется последующее обратное исправление), и слишком мелкие детали теряются
    Очень быстро - Очень очень медленно, но вы можете обрабатывать несколько изображений одновременно без потери скорости

  • Furry
    Красивый и детализированный результат, но только если большая версия должна быть монохромным изображением (только чисто черно-белым, или для цветного - только чисто красным, черным, зеленым, желтым, фуксией, синим, голубым и белым)
    Очень медленно - Очень очень медленно, но Вы можете обрабатывать несколько изображений одновременно без потери скорости

  • Rough
    Типографская растровая стилизация, но если большая версия должна быть монохромным изображением, то дает приемлемый результат для масштабирования
    Очень медленно, но вы можете обрабатывать несколько изображений одновременно без потери скорость

  • Separate
    Дает красивый, но почти монохромный результат и есть артефакты звона (чтобы избежать, можно попробовать несколько x2-x4)
    Очень очень быстро - быстро, но Вы не можете обрабатывать несколько изображений одновременно без потери скорости

  • BA
    Четко определенная структура сетки и могут присутствовать артефакты звона Гиббса, но это лучше, чем ближайшим соседом
    Очень очень быстро - Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно без потери скорости

  • BAContrast
    Видна сеточная структура, немного контрастно и могут присутствовать артефакты звона
    Очень очень быстро - Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно без потери скорости

  • BASmoothContrast
    Контрастно и может быть видна сеточная структура
    Очень очень быстро - Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно без потери скорости

  • BAmonochrome
    Гладкий, криволинейный и в то же время чёткий результат, но монохромный (вследствие чего цвета могут искажаться)
    Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • BAmonochrome2
    Чёткие границы, но цвета могут искажаться
    Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • BAExtremum
    Чёткие края, но контрастно (для точности необходима обратная корректировка) и присутствует большой звон
    Очень очень быстро - Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • 255BA
    Расплывчато, но не размыто, возможно будет нужна обратная корректировка
    Очень очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • Thin255BA
    Утоньшает объекты и делает их красочнее
    Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • DerivativeBA
    Большой звон в сеточной структуре, контрастно, но чёткие края
    Очень быстро - Очень медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • SmoothCAS
    Гладко, чётко, немного контрастно и видна сеточная структура, но точно даже без обратной корректировки
    Быстро, и Вы можете обрабатывать одновременно несколько изображений без потери скорости

  • AntiBicubic
    Резко и отсутствует сеточная структура, но немного шумно и может присутствовать гало
    Медленно, и Вы не можете обрабатывать несколько изображений одновременно

  • FastNearestNeighbour
    Только сеточная структура
    Самый быстрый метод, но Вы не можете обрабатывать несколько изображений одновременно без большой потери скорости

Можно увеличить скорость за счёт точности и наоборот