Как я обнаружил фейковые мегапиксели у смартфона улучшая старые фото с помощью нейросети
И так, есть у меня значит некоторое количество старых фото, сделаны они на кнопочный телефон Motorola L7 SLVR что в свою очередь был найден в мусорном баке:
реклама
Что может быть лучше для экспериментов, чем фото сделанные на телефон который был найден в мусорном баке? Похоже я не умею в каламбуры...
Ладно, перейдём сразу к делу.
реклама
Есть значит у меня фото сделанное более 10 лет назад на кнопочный телефон, вернее не одно фото, а несколько фотографий:
И есть у меня сборка Stable Diffusion web UI Neuro которая может нарисовать всякое:
реклама
Но сейчас я хочу улучшить уже существующее реальное фото, потому пробую раздел img2img в SD WebUI. Да, оно работает, но делает не то что нужно, оно не улучшает, а рисует на основе изображения:
Получилась какая-то чернобыльская курица:
Хм, что же делать... Можно конечно использовать сборку Real ESRGAN из контекстного меню проводника:
реклама
Получаю увеличенное в 4 раза изображение, потом это изображение уменьшаю в 4 раза и получаю вполне неплохой результат:
Но Real ESRGAN из контекстного меню предназначен для быстрой обработки изображений, т.е. два клика и готово, потому возвращаюсь в сборку SD WebUI и перехожу к разделу Extras:
На этот раз использую "R ESRGAN 2x+" и множитель увеличения 1, таким образом получилось улучшить изображение практически сохранив оригинал.
Первое изображение оригинал, второе 2x+, третье уже сделано через контекстное меню:
И как можно заметить, модель для двухкратного увеличения в составе SD WebUI сохранила больше деталей чем результат полученный через контекстное меню, хотя полностью подавить кубики сжатия JPEG не смог никто:
Хм, вообще есть куча моделей и алгоритмов, кроме LDSR конечно, ибо он ломает SD WebUI при использовании...
Так собралось некоторое количество результатов, можно конечно начать обсасывать каждый результат, но нет, мне просто не интересно сейчас это всё ковырять, у меня есть идея получше.
Запускаю StarStaX и бросаю всё в обработку, готово:
Так уже интереснее:
Хм, а что если обработанное обработать ещё раз? И это сработало, даже кубики JPEG устранились, а вместе с ними и часть детализации:
Впрочем, никто не запрещает ещё раз совместить результаты между собой и получить нечто среднее среди лучшего.
Думаю суть понятна, улучшаю разными моделями оригинал, объединяю результаты в один, и на этом всё собственно, не сказать что вышло идеально, но выглядит гораздо лучше:
Следующее изображение я уже решил увеличивать в 2 раза:
Обрабатываю результаты:
И уже в самом конце обработки уменьшаю размер до оригинального, и таким образом получилось избежать явно выраженных JPEG кубиков:
Далее тяжёлый случай, тёмное изображение с большим количеством шума, выглядит не очень хорошо даже после обработки:
Впрочем, даже такое изображение удалось относительно неплохо улучшить:
Со следующей фотографией особых проблем не возникло, тут вообще улучшать нечего, ибо у Motorola L7 сенсор камеры выдает настоящие 0.3МП как и заявлено, и в данном случае освещения хватило, чтобы получить максимальную детализацию и качество.
Так что обработка с помощью нейронных сетей разве что подмылила немного и очистила от артефактов сжатия JPEG, ведь камера телефона и так выдала максимально возможную детализацию для своего разрешения, это не "мыльница" которой напишут 16 мегапикселей, а на самом деле установят сенсор всего на 4 МП, например Fujifilm F500EXR.
Далее аналогично, значительных улучшений нет так как камера телефона и так выдала свой максимум.
Можно конечно увеличить в 2-4 раза, но выглядит это не очень естественно, потому я предпочитаю не увеличивать размер изображения когда нужно поднять качество.
Ладно, хватит фотографии древней Motorola L7 мучить, пора перейти к фото сделанным КПК HTC TyTN, и вот здесь уже результаты интереснее.
Может разница на первый взгляд и небольшая, но нет, это так кажется потому что оригинал практически не изменился в плане содержимого.
Главное изменение это исчезнувшие JPEG кубики, а ещё повысилась резкость:
В общем улучшение удалось отлично.
Следующее фото получилось сомнительно, да, нейронные сети не панацея от всех проблем, это лишь инструмент который может быть полезен при грамотном использовании, а может и нет.
А вот следующее фото не получилось улучшить, оно уже снято смартфоном ZTE Blade в 2013 году.
Вообще фото сделанные при помощи ZTE Blade весьма сложно обрабатывать, слишком уж они "мыльницы"...
Я просто не знаю как с этим быть, мне конечно удалось немного повысить качество, но весьма сомнительно, это изображение без потерь ужалось с 2048x1536 до 800x600, и может быть даже меньше можно без потерь ужимать размер, вот настолько фактическая детализация не совпадает с размером изображения у ZTE Blade...
Хм, я так подумал, и сжал размер оригинала до 640x480, а после прошёлся нейронными сетями, детализации я особо не потерял сжимая 2048x1536 в 640x480, и нейронные сети гораздо лучше сработали с оригиналом ужатым именно в 640x480, а это уже говорит о том, что производитель обманул с фактическим разрешением сенсора у камеры.
В общем я улучшил изображение, далеко не идеально, но результат всё же есть даже с таким фото...
А теперь посмотрим на "чудо", слева оригинал 2048x1536 сжатый до 1600x1200, справа я ещё сильнее пережал, уже в размер 640x480, собственно в этом и "чудо", что я смог 2048x1536 оригинал с камеры смартфона ужать без особых потерь до 640x480, просто из 3 МП прямиком в 0.3 МП:
Имея дело с подобными фото фактическая детализация которых значительно меньше размера изображения, следует сначала уменьшить изображение, и только потом скармливать в обработку.
Нужно бы попробовать на другом фото такой подход.
Я специально выбрал фото при отличном освещении с хорошим фокусом, увы, чудес не случилось, реальное разрешение сенсора у ZTE Blade явно ниже заявленных 2048x1536 (3 МП), наглость производителя просто зашкаливает...
Можете сыграть в увлекательную игру "найдите оригинал":
А я ещё говорил что Fujifilm совсем обнаглели в камеру за 300$+ устанавливать сенсор на 4 МП вместо заявленных 16 МП... Хотя ладно, Fujifilm действительно совсем обнаглели, остаётся только надеяться что они исправились к текущему времени и перестали обманывать потребителей...
В общем, первое фото оригинал в размере 2048x1536, второе интерполировано из 640x480 до 2048x1536 при помощи "ESRGAN_4x", конечно, при загрузке в статью размеры были ужаты до 1600x1200, но сути это не меняет, визуально разница крайне незначительна:
Эх, начинал с улучшения фотографий, а закончил...
Может у меня просто так звёзды совпали на небе? Ладно, возьму другое фото при отличном освещении. Ну что, сложно найти где оригинал?
А если приблизить? На фото есть прекрасный объект из металлопрофиля, если бы не он, то так и можно было бы сказать что в смартфоне установлена камера разрешением 640x480, но нет, в смартфоне скорее всего установлена камера с физическим разрешением 1280x960, ибо я смог уменьшить изображение именно до таких размеров без потери рёбер металлопрофиля.
Конечно, я не имею доступа к RAW данным сенсора, и я уменьшал уже готовое фото при помощи алгоритма Lanczos. Такой подход не позволяет максимально точно определить минимальную границу после которой начинает падать детализация, именно потому и предполагаю что реальное разрешение сенсора всего 1280x960 (1.2 МП) вместо положенных 2048x1536 (3 МП).
Что толку говорить, давайте посмотрим что выйдет если уменьшить фото до 1280x960 и после интерполировать до 2048x1536:
Есть в этом нечто примечательное, я интерполировал изображение при помощи "ESRGAN_4x" и получил результат максимально идентичный оригиналу, а это значит лишь одно, нейронные сети были доступны производителям уже в 2011 году, и производители их эксплуатировали, чтобы обманывать потребителей ради лишних денег в карманы за счёт установки более дешевых сенсоров накручивая мегапиксели интерполяцией...
Не знаю зачем оно мне нужно было, ведь у меня уже давно нет этого смартфона под рукой, но я всё же пришёл к реальному разрешению сенсора у камеры смартфона ZTE Blade, нет там никаких 3 МП заявленных, есть только 1.2 МП интерполированные до 3 МП:
Ладно, теперь задача, как такую "мыльницу" улучшить когда производитель нагло обманул с разрешением камеры? Правильно, нужно уменьшить изображение до настоящего разрешения и после этого скармливать нейронным сетям.
Да, оптика у ZTE Blade отвратительна, и по-хорошему нужно сжимать изображение до 640x480 чтобы нейросеть начала хорошо работать, но сейчас моя задача не нарисовать новое изображение из оригинала пережатого, а улучшить оригинал, и это у меня отчасти получилось, хотя мыльные куски в деревьях так и остались мыльными кусками...
Пожалуй пора на этом заканчивать.
Нейронные сети это конечно хорошо, и кто-то даже скажет что со временем они лишат людей работы, но нет, не лишат, ибо нейронные сети всего лишь инструмент помогающий делать работу эффективнее и лучше.
И если такие инструменты как нейронные сети способны заменить человека на работе, значит этот человек занимался дурной работой, иначе я не знаю как это назвать.
Даже взять улучшение фотографии, всё получилось не потому что нейронные сети такие крутые уже готовы выбросить костлявые мясные мешки на свалку истории, нет, я получил результат потому что грамотно использовал инструменты.
По факту я даже без нейронных сетей смог бы улучшить фото, но мне пришлось бы расчехлить графический планшет и вложить целую массу труда в это действие, а так при помощи нейронных сетей я просто управлял процессом и вносил коррективы когда это необходимо, а всю "дурную работу" сделала нейросеть.
Так и должны работать любые инструменты, брать на себя "дурную работу" упрощая задачу человеку.
Ну а тем кто так и не понял, могу только предложить пожарить нарезанную ломтиками картошку без сковороды и любой другой кухонной утвари, это конечно возможно, но полагаю это будет весьма забавное зрелище, и не дай бог увидят соседи...
Точно, для обработки использовались сборки Neuro: ( https://github.com/Shedou/Neuro ).
Стэкинг изображений StarStaX: ( https://markus-enzweiler.de/software/starstax ).
Графический редактор Krita для работы с изображениями: ( https://krita.org/en/ ).
Теперь можно завершать статью.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила