27 June 2014

«Взлом» SmartDeblur 2.2

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

Берём испорченную шевелёнкой картинку



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



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



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

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



Кое-какие следы всё-таки остались. То ли виновата потеря точности, то ли я немного ошибся в формулах. Но теперь водяные знаки не так резко бросаются в глаза, чего для наших целей вполне достаточно. И будем благодарны автору программы SmartDeblur за комментарии.
Tags:SmartDeblurпятница
Hubs: Image processing
+29
21.1k 55
Comments 24