«Взлом» SmartDeblur 2.2

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

87d13c0052271503873c2a53876cbd05.jpg

Прогоняем через демоверсию SmartDeblur и получаем

632efc83f20f969c9c288311e03db42a.jpg

Замечаем водяные знаки, которые нам не нравятся. Если повторить эксперимент несколько раз с одной и той же исходной картинкой, то видно, что знаки очень статичны: не меняется ни текст, ни положение надписей. Значит, для наложения водяных знаков SmartDeblur просто применяет какую-то маску. Какую именно? Очень легко узнать! Подсовываем программе белое поле такого же размера, как исходная картинка. Переключаем в режим исправления размытия Гаусса с радиусом 0.1 и получаем

38b58344998a5eff4a9ae7f1bb9231c6.png

Это и есть искомая маска. Пространство между надписями, кстати, не совсем белое, хм, ну ладно… Вычисления будем производить в системе RGB с целочисленными значениями от 0 до 255, в общем, без экзотики. Экспериментально удалось определить, что маска накладывается по формуле Rout = Rin * Rmask ÷ 255, где Rin — значение красного канала до наложения маски, Rmask — значение красного канала самой маски, Rout — значение красного канала, получаемое в результате наложения маски, ÷ — целочисленное деление. Для зелёного и синего каналов то же самое. В графических редакторах такой способ обычно называется просто «умножение».

Против «умножения» будем применять «деление». Правда, с потерей точности. Вычисляем по обратной формуле Rin = Rout * 255 ÷ Rmask и видим

e0ce271ab72fb41270a03857f61a5c5f.jpg

Кое-какие следы всё-таки остались. То ли виновата потеря точности, то ли я немного ошибся в формулах. Но теперь водяные знаки не так резко бросаются в глаза, чего для наших целей вполне достаточно. И будем благодарны автору программы SmartDeblur за комментарии.

© Habrahabr.ru