Pull to refresh

Comments 24

UFO just landed and posted this here
Да я, по сути, ничего и не ломал. Даже не пользовался дизассемблером. Лишь производил вычисления над результатами работы программы, и то с потерей точности.
Теперь автор сделает наложение водяных знаков случайным образом по изображению, и всё :)
Автору советую ещё и делать буквы в надписях из случайного шума.
А вот положение надписей если и менять случайным образом, то очень осторожно. Иначе я несколько раз прогоню одну и ту же картинку через программу и соберу результат из тех кусочков, на которых нет надписи.
Ещё рацпредложение: вычислять все "случайности" из хэша исходной картинки. Тогда бесполезно и прогонять картинку несколько раз, и белое поле вместо неё подсовывать.
Спасибо за предложения! Возможно, поменяю алгоритм наложения водяных знаков.
Собственно, защита как таковая у SmartDeblur'а без особых наворотов по принципу «кто не хочет купить, все равно не купит».
Если нужен ключик — пишите, чтобы не мучится каждый раз с удалением маски )
Спасибо. Ключик пока не нужен, выручает фотоштатив. А вот почему в маске пространство между надписями не совсем белое — интересно. Это результат деконволюции белого поля или просто маска такая?
Маска не имеет фона. А вот процессы поиска ядра, деконволюции и пост-фильтрации всегда вносят какие-то искажения в виде звона, небольшого изменения тона, шума и пр.
Вот как я это делаю в своем приложении (Java):
private void putWaterMark(Mat alpha){
	String logo = _applicationName;
	String subLogo = "Free version";
	double fontScale = 1;
	double maxFontScale = 15;
	int thickness = 7;
	int [] baseline = {0};
	// начало текста по горизонтали
	double x = Math.random() * alpha.cols()/10+15;

	// начало текста по вертикали
	double y1 = alpha.rows() / 10.;
	double y2 = alpha.rows() * 0.9;
	double y = y1 + Math.random() * (y2 - y1); 
		
	Point beginLogo = new Point(x,y);
		
	// максимальная ширина текста
	int maxLength = alpha.cols() - (int) beginLogo.x;
		
	// подбор размера фонта под ширину текста:
	Size textsize = new Size(100,100);
	for (double d=maxFontScale; d>0; d = d - 0.5){
		textsize = Core.getTextSize(logo, Core.FONT_HERSHEY_COMPLEX, d, thickness, baseline);
		if (textsize.width < maxLength) {
			fontScale = d;
			break;
		}
	}
		
	Core.putText(alpha, logo, beginLogo, Core.FONT_HERSHEY_COMPLEX, fontScale, new Scalar(255), thickness);
	beginLogo.y = beginLogo.y + textsize.height;
	Core.putText(alpha, subLogo, beginLogo, Core.FONT_HERSHEY_COMPLEX, fontScale/2, new Scalar(255), thickness-3);
}


Я использую в приложении библиотеку OpenCV, поэтому она же применена здесь при наложении текста.
На входе пустое изображение (Mat alpha) того же размера как исходное, только в градациях серого (однобайтное). На выходе на него наложен требуемый текст. И сейчас это изображение можно накладывать на исходное. Как — зависит от конкретной реализации, вот у меня здесь есть немного про наложение картинок.
Вот, кстати результат наложения:
image
Тут тоже не всё очевидно, ведь при реализации вашего предложения «в лоб» изменение одной точки где-то в углу может сдвинуть все надписи. Тогда опять можно будет просто собрать картинку по кусочкам.
Практически из любого подхода с наложением водяных знаков можно собрать изображение по кусочкам. Поэтому обычно реализуют стандартное наложение даже в фотостоках.
Да. Даже если положение надписей постоянно, а меняется лишь шум в буквах, то можно попытаться собрать статистику и вычислить кое-какой результат. В общем, согласен с вами, что хэшировать надо с умом.
Не поможет. Многократно меняем 1 пикс в картинке (например верхний левый) — хэш меняется, и задача сводится к рецепту mporshnev.

Можно для демо-версии не всю картинку «шарпить», а например только верхнюю половинку. Предвосхищая «добавить снизу белое поле, потом обрезать» — думаю, не прокатит, т.к. это повлияет на поиск пути смазывания, так что результат не будет эквивалентен. Да, можно повернуть и повторить, потом склеить… ну еще можно кружочками.

Или, к примеру, лимит по разрешению ставить.
Класс! Использование программы для её же эксплойтинга. Замечательно придумано!
Это как через IDA дизасмить её же (платную).
Всегда хотел сделать что-то подобное с фотографиями фотостоков. Но дальше мыслей «хм, надо как-нибудь попробовать» никогда не делал. Вы молодец :)
SmartDeblur же открытая была? Теперь закрытая, да ещё и с водяными знаками?
Open source версия, насколько я могу судить, не развивается, так что всё-таки «была». А закрытые её не заменят.
Эх, сделал бы кто-то простую программу для Super Resolution. Или попросту чтобы после пары кликов мышкой можно было бы вычленить чуть более качественынй кусок из последовательности кадров
Да, это было бы хорошо для кадров с видео.
Это, пожалуй, самый частый вопрос по SmartDeblur'у — как восстановить нечитаемый номер с регистратора или уличной камеры
У меня примерно та же задача, только с портретом злоумышленника, ломился тут один на днях… Впрочем все эти задачи от экономии на камерах/регистраторах
Тут задача простая, потому что можно применить водную метку к пустому изображению. Веселее подбирать шрифты, воссоздавать фотошоповские эффекты и их разворачивать (прозрачность, тень...). Вот развлекался (очень давно):

превью

Было: i31.tinypic.com/2e0rayf.jpg
Стало: i27.tinypic.com/eaf9ue.jpg

Очень огорчает, когда замечательные фотографии и рисунки оскверняются конскими метками…
Sign up to leave a comment.

Articles