Pull to refresh
4
0
Настоящее имя @AngReload

Специализация

Send message

Ага. Для красивых картинок обычно делается в фотошопе размытие по диску и результат бережно сохраняется в PNG, а потом деконволюция запросто его обращает. В реальных изображениях задача посложнее:


  1. Трудно найти функцию размытия, которую нужно обратить. Это грубый перебор с несовершенной проверкой качества получающегося изображения. Даже в простейших случаях: пятно блюра обычно некруглое, смаз неровный.
  2. Функция размытия отличается для разных точек изображения. Объекты в кадре находятся на разной глубине, движутся с разной скоростью.
  3. Краевые эффекты по границам изображения и объектов.
  4. Неидеальность исходника. Типичные алгоритмы сжатия удаляют малозаметную глазу, но важную для деблюра информацию с изображения. Плюс блочность и шум жипега. Вообще говоря, даже если сжатия нет, шум квантования при большом размытии сильно повлияет на результат.
  5. Маленький диапазон яркости SRGB, когда все значения обрезаются до 255, следовательно звон вокруг белых пикселей.

Не хочу показаться грубым, но я ничего не говорил про видео-регистраторы.
Только то, что кадр "до" из Аватара вовсе не в маленьком разрешении. Он расфокусирован, при том совсем чуть-чуть.
А на хороших данных деблюр способен отработать очень хорошо. В этой сцене нет чего-то чересчур фантастического.

В аватаре, кажется, было не повышение разрешения, а гораздо более реалистичная деконволюция блюра.
deblur

Я бы не согласился, что не возможно предположить. Зрение людей неплохо изучено и переложено на достаточно точные математические модели цветовосприятия. Возможно вы уже читали эту книгу — http://media-shoot.ru/books/Mark_Fershil_d_-_Modeli_cvetovogo_vospriyatiya.pdf


Ну и животные исследуются, сам читал только про кролика, но вот по морской свинке с хорошими ссылками на другие работы — https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2677103/


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

Вы описали идеальный shadowban.

Почему так долго сидят в nightly такие штуки как Duration.as_millis()? Не понимаю.
Там же одна строка кода, давно бы отметили стабильным.

Да, я долго тупил.

del, сам нашел ответ почему у меня была карма 5
Вроде бы я получил приглашение по ошибке https://habr.com/ru/company/tm/blog/409277/#comment_18512997

Такие большие картинки принято прятать под спойлер.

Не жди, поставь юзерскрипт и сворачивай ветки комментов уже сейчас
https://greasyfork.org/ru/scripts/368828-habr-features

Тут прослеживается связь с процессом который идёт в глазу.
Сигналы с чувствительных клеток красных, синих и зелёных, преобразуются к:


  • яркости (К + З + С)
  • красно-зелёный (К — З)
  • жёлто-синий (K + З — С)

И уже преобразованный сигнал идёт в мозг.
image


Не только у приматов такая схема, у всех млекопитающих и многих других животных. Правда, не помню как на этот процесс влияет цветовая слепота.


Оппонентный процесс: https://en.wikipedia.org/wiki/Opponent_process


Ещё читал, что первые млекопитающие сначала утратили красные рецепторы из-за ночного образа жизни, а потом предки людей вновь приобрели чувствительность к красному, так как это сильно помогало им находить пищу.

Вы не покрутили настройки waifu, думаю что удаление шума и профиль UpRGB могут дать результат лучше фотошоповского.


Ещё хотелось бы упомянуть Madshi Video Renderer — отрисовщик совместимый с многими видеоплеерами. С ним нет необходимости в конвертировании видео, только установить и раз покопаться в настройках проигрывателя. Если потянет видеокарта, то даже может нейросеткой NGU очень круто ресайзить. Там у него ещё есть удаление артефактов сжатия на нейросетях, удаление бандинга, да и вообще дофига всяких опций.


извиняюсь за большой скриншот

Mozilla представила ещё один мобильный браузер

Это уже становится постоянной рубрикой в дайджесте.

Нет, это не обезличенные данные. Это статистика привязанная к конкретным пользователям.
Если её обнародовать, то обычный пользователь будет стремиться улучшить этот показатель: ставить плюсы любой фигне и игнорировать явный бред. Ведь кто-то может зайти в твой профиль, посмотреть на твои некрасивые цифры и поставить минус в карму.


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


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


Этой статистики недостаточно, чтобы делать правильные выводы о поведении юзеров. И надо ли их делать? Сейчас оценки искренние, и это самое главное что от них нужно. Иначе станут фальшивыми и бесполезными.

Я против. Оценки — личная тайна каждого сейчас, тайной они и должны остаться.
Если вы ищете тех кто использует скрипты или вручную ставит всем поголовно минусы, то их тут просто нет. Слишком много для этого есть публикаций без минусов, и комментариев вообще без оценок.
Почему — не знаю. Может быть ограничения на карму, количество оценок в день, невозможность изменить голос, или контроль НЛО тому причиной.

Если навести курсором на рейтинг, то выскочит всплывашка:

Я делал юзерскрипт, чтобы эти цифры всегда было видно:

Прошу прощения, но зачем вам ограничение до N? O_o
Тот же код, но с бесконечной последовательностью
fn triples() -> impl Iterator<Item = (u32, u32, u32)> {
    (0..).flat_map(move |z| 
        (1..z).flat_map(move |x| 
            (x..z).map(move |y| 
                (x, y, z)
            )
        )
    )
    .filter(|(x, y, z)| x*x + y*y == z*z)
}

fn main() {
    for triple in triples().take(100) {
        println!("{:?}", triple);
    }
}

Вот то, что написано в оригинале на C, но на Rust, поймёт практически любой школьник:
fn print_n_triples(n: u32) {
    let mut i = 0;
    for z in 1.. {
        for x in 1..=z {
            for y in x..=z {
                if x*x + y*y == z*z {
                    println!("{}, {}, {}", x, y, z);
                    i += 1;
                    if i == n { return; }
                }
            }
        }
    }
}

Information

Rating
Does not participate
Registered
Activity