Как стать автором
Обновить

Точное увеличение растровых изображений

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.8K
Всего голосов 13: ↑12 и ↓1+16
Комментарии40

Комментарии 40

Пока однозначно победил мой scaleSmooth

scaleSmooth 15,64%
waifu2х 15,72%

Разрыв в 0,08% - так выглядит однозначная победа? На одной невнятной тёмной картинке? waifu2х натренирован на артах, это для других изображений. Не говоря о том, что у waifu2х есть разные сети на разные случаи.

Дельное замечание - рисунки тоже делятся на разные стили, немного исправил текст

Ну, указали вы модель waifu2х, это ничего не решило. Вы пробовали другие модели? Давайте посмотрим ваши картинки со сравнения. Почему оригинал выглядит размытым? Сравните результат waifu2х со своим, визуально у waifu2х лучше, с более чёткими деталями. Если у вас изображение ближе к фото, то и модель другую надо выбирать, модель art пытается сделать более чётко, как на рисунках. Да и, еще раз, картинка вообще не подходящая, что я должен в темноте высматривать.

Всё верно, но другие картинки и модели waifu будут в следующей части

Больше примеров и наглядности - здесь

Шансов качественно апскейлить произвольное изображение нет никаких, ибо информация там уже безвозвратно потеряна. Но если мы имеем дело с ограниченным количеством знакомых элементов (например, изображение числа или осмысленного текста или дорожного знака), то можно восстановить даже пожатое до трех-четырех пикселов изображение.

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

Опять же, точный апскейл возможен в специфичных случаях. Например, если у нас есть априори информация о классе или стиле исходного изображения. Вот клипарт - набор сплайнов определенной толщины и цвета с однотонными заливками без мелких элементов между пикселами ужатого изображения (теорема Колмогорова). Да, тогда восстановить возможно и даже без нейросеток. При даунскейлинге теряются высокие частоты спектра. Методы AI восстанавливают их из тренировочного датасета, что часто приводит к галлюцинациям (далекие минареты в Нью-Йорке, павлины в облаках и т.п.)

Да, осталось автоматом определять класс и стиль исходного изображения с максимальной точностью и применять для него метод, дающий максимальную точность для этого вида изображений (в идеале 100%, если нет мелких элементов между пикселами ужатого изображения). Может Вас смутило название статьи - здесь "точный" означает максимально точный насколько это возможно. Понятие вида "идеальный газ"

Тем более, что на практике мы вряд ли будем апскейлить произвольное изображение (например, белый шум), а один из классов - рисунок, фото, трёхмерная графика, текст с их подклассами, или, применительно, к научным данным - всегда есть какая-то закономерность, а это уже накладывает некие ограничения на произвольность изображений. Всё равно ошибка будет, но это даёт нам ещё немного информации. Вопрос, как ей эффективнее воспользоваться.

Например, для базы ImageNet [1000 различных классов объектов], несмотря на то, что каждое изображение содержит 224 × 224 × 3 = 150528 пикселей, оценка внутренней размерности лежит [всего] между 26 и 43

https://alphacephei.com/ru/lecture12.pdf
Что говорит о том, что у нас заранее НЕ произвольные данные (само понятие изображения - не то же самое, что данные)

Качественно апскейлит Upscayl, но обсуждаемая тема - не качество, а точность. Нейросети выдают много качества за счёт галлюцинаций/допущений, снижающих точность, то есть вместо вероятности (информации у нас недостаточно для определения конкретной реализации) выдают одну реализацию, зато качественную.

Есть такая мудрость - зачем делать правильно то, что делать вообще было не нужно.

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

К сожалению, бывают случаи когда это нужно - например, медленная скорость интернета, но желание посмотреть видео прямо сейчас и без лишнего мыла.

Пример нужности. Вот фотография, на ней здание, на здании текст. Если увидеть текст, можно точно датировать фотографию. Чтобы прочитать текст, надо апскейлить его хотя бы в два раза. Средствами фотошопа получается слишком невнятная картинка, прочитать на ней не удаётся.

Если текст нечитаем, то нельзя полагаться на апскейлинг (любой, хоть нейросеть, хоть алгоритм), он может дорисовать буквы неправильно.

Задача не в том, чтобы прочитать каждую букву, а в том, чтобы угадать лозунг.

Может, но если это действительно необходимо какому-либо человеку и не существует более лучшей фотографии, то какой метод использовать, чтобы минимизировать ошибку? А вообще с текстами немного другая ситуация - если он не рукописный, и мы знаем язык, шрифт, кегль, кернинг, расстояние то до определённых пределов (например один символ - хотя бы 2х2 пикселя) можно достаточно точно подобрать символы

По моему, пока что лучше всего справляется scaleFurry, ну, у кого здесь как получится прочитать нижнюю строчку?

Первое слово "студия", то есть 30% задачи исполнено. Дальше идут имя и фамилия, их читать не следует.

Круто, это на какой картинке читается, я просто кроме ст ничего разобрать не могу, а почему имя фамилия читать не следует?

студия дизайна интерьера

нет, там действительно имя фамилия

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

Я боюсь у вас изначально некорректный тест, при таком сильном "одномоментном" уменьшении изображения, большинство алгоритмов просто "выкидывают" большую часть пикселов. Т.е. большая часть первоначального изображения просто не приняла участие в формировании уменьшенной копии.

Спасибо, в следующей части использую для уменьшения точное усреднение, как на фото - то что в фокусе, но вдалеке

При уменьшении картинки свои тонкости есть:

Да, но это слишком специфический случай, никак не относящийся к практическому повседневному использованию и тем более к фото

Кажется, я его и использовал

Решаемая задача кажется мне немного странной. Кто то уменьшил картинку, просто выкинув кучу пикселей не подумав о восстановлении в исходный размер. Если бы при даунскейлинге сохранялись бы дополнительная информация для апскейлига (ну скажем, какие цвета имеют чёткую границу, а какие размазанную) то картинку можно было бы восстановить качественее. Правда я только что изменил постановку задачи: как сжать картинку с потерями и максимально точно/быстро восстановить (для медленного инета, например). Допустимый размер доп-инфы это хороший вопрос, да..

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

Если после апскейла изображение мутное, можно немножко резкости накинуть, используя unsharp mask. AMD FidelityFX Super Resolution 1.0 так и делает, только величина резкости ещё рассчитывается по локальному градиенту яркости.

Огроменное спасибо, попробую в будущих анализах, но пока что кажется, что это просто улучшает визуальное восприятие, как нейросети, и ухудшает точность

Unsharp Mask с предположительными параметрами и одинаковой величиной по всему изображению на примере кубической интерполяции
Unsharp Mask с предположительными параметрами и одинаковой величиной по всему изображению на примере кубической интерполяции

Наглядная демонстрация проблемы нейросетей - даже то, что можно было раньше разобрать - исковеркано, увеличилось качество, но понизилась точность
Наглядная демонстрация проблемы нейросетей - даже то, что можно было раньше разобрать - исковеркано, увеличилось качество, но понизилась точность

unsharp sigma=1.5

тут пусто

Не туда отправил.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории