Comments 8
Что такое "правило RIS"?
Ссылка на целую статью дана. Процитирую:
"Правила RIS (Reverse Interpolate Scale) рассматривают методы и методики минимизации, либо полного устранения (если это возможно) данного «дефекта» для некоторых видов масштабирования."
А ежели совсем просто: При масштабировании прямо-обратно в идеале получить исходное изображение.
То есть превратить интерполяцию (вставку промежуточных значений между исходными) в суперразрешение (разбиение исходных значений на несколько составных). Не думал, что кто-то вручную сделает это махинациями со слоями графического редактора.
Когда-то и сам написал скрипт для такого. Он слишком примитивен для того чтобы хорошо выглядеть при коэффициенте масштабирования 2 и больше (тут уже нужны нейросети или хотя-бы Edge Directed Interpolation), но когда нужно изменить размер на несколько пикселей, то выглядит заметно чётче простой интерполяции https://crates.io/crates/sharpened_bilinear
Даже при линейной интерполяции использование этой методики даёт значительное снижение размытия без резких эффектов ступенчатости.

И нет. Это не суперразрешение. Это развитие интерполяционных методов для устранения их главного недостатка.
То что там внутри используется интерполяция не означает, что весь процесс является интерполяцией.
Интерполяция - это проведение некого непрерывного полинома между известными точками. В случае линейной интерполяции этим полиномом является простая линейная функция, так что при увеличении в 3 раза из пикселей А, Б и В получится последовательность из оригинальных пикселей перемежаемых парой промежуточных: А, (⅔А + ⅓Б), (⅓А + ⅔Б), Б, (⅔Б + ⅓В), (⅓Б + ⅔В), В.
Небольшое отступление: для уменьшения изображений большинство софта использует не интерполяцию (иначе бы после увеличения в 3 раза и уменьшения получилось бы исходное изображение; интерполяция по определению обратима), а свёртку с масштабированным ядром интерполяции. Операция эта гораздо ближе к суперсемплированию, чем к интерполяции - большая область пикселей исходного изображения усредняется до одного пикселя уменьшенного, тогда как интерполяция для уменьшения была бы больше похожа на метод ближайшего соседа.
Вы же после интерполяции уменьшаете изображение, вычисляете ошибку и корректируете входные значения для интерполяции так, чтобы при очередном уменьшении получить изображение близкое к исходному. Так как пиксели в оригинальных точках меняют значения, то это не интерполяция. Подбирая такие значения точек полинома, чтобы среднее конечных пикселей было равно Б = ((⅓А' + ⅔Б') + Б' + (⅔Б' + ⅓В')) / 3, где значения со штрихом - подбираемые корректируемые, вы решаете задачу суперразрешения.
Утверждение "интерполяция по определению обратима" для изображений в общем случае неверно. Оно верно только когда узлы большого и маленького изображения точно совпадают. Обычно это всегда не так. В приведённом примере для изображения 512x512 и увеличенного до 4096x4096 практически ни один узел не совпадёт.
То есть происходит то самое смешение цветов. И свёртка в данном случае слабо влияет на что-либо.
Для уменьшения размера GIMP использует интерполяцию, причём ровно ту, что выбиракется пользователем.
Ваше объяснение разницы двух слоёв не только не объясняет результат, а наоборот делает его "странным" и "необъяснённым". В операции участвует только масштабирование. А где тогда указанный вами подбор чего то там?
Но ведь это и так работает хорошо, например с тем же фильтром Ланцоша. Проблема в том ,что само изображение хранится не в линейном цветовом пространстве, а в гамма кодированном (sRGB), и при преобразовании делается выбор в пользу более точного совпадения отдельных пикселей, а не суммы группы. Если я правильно понимаю - скрипт как раз компенсирует накопившуюся ошибку группы, но по сути это же добавление шума чтобы сумма по группе сошлась?
GIMP: устранение дефекта масштабирования