Издеваться будем над замечательной программой господина YUVladimir под названием SmartDeblur, которая предназначена для исправления смазанных изображений. Полноценным взломом это назвать, конечно, нельзя. Так, небольшое упражнение с картинками.
Берём испорченную шевелёнкой картинку
Прогоняем через демоверсию SmartDeblur и получаем
Замечаем водяные знаки, которые нам не нравятся. Если повторить эксперимент несколько раз с одной и той же исходной картинкой, то видно, что знаки очень статичны: не меняется ни текст, ни положение надписей. Значит, для наложения водяных знаков SmartDeblur просто применяет какую-то маску. Какую именно? Очень легко узнать! Подсовываем программе белое поле такого же размера, как исходная картинка. Переключаем в режим исправления размытия Гаусса с радиусом 0.1 и получаем
Это и есть искомая маска. Пространство между надписями, кстати, не совсем белое, хм, ну ладно… Вычисления будем производить в системе RGB с целочисленными значениями от 0 до 255, в общем, без экзотики. Экспериментально удалось определить, что маска накладывается по формуле Rout = Rin * Rmask ÷ 255, где Rin — значение красного канала до наложения маски, Rmask — значение красного канала самой маски, Rout — значение красного канала, получаемое в результате наложения маски, ÷ — целочисленное деление. Для зелёного и синего каналов то же самое. В графических редакторах такой способ обычно называется просто "умножение".
Против "умножения" будем применять "деление". Правда, с потерей точности. Вычисляем по обратной формуле Rin = Rout * 255 ÷ Rmask и видим
Кое-какие следы всё-таки остались. То ли виновата потеря точности, то ли я немного ошибся в формулах. Но теперь водяные знаки не так резко бросаются в глаза, чего для наших целей вполне достаточно. И будем благодарны автору программы SmartDeblur за комментарии.
Автор: mporshnev