如何以不可见的方式给一些矢量数据加水印?
我有一些手动创建的矢量数据,它只是 x,y 值的列表。点的坐标并不完全准确 - 它可能会偏离几个像素,并且不会产生任何可察觉的差异。
所以现在我正在寻找某种方法来给这些数据加水印,这样如果有人窃取了矢量数据,我就可以证明它确实被窃取了。我正在寻找一些足够可靠的方法,即使有人拿走我的数据并将所有点移动一点点,我仍然可以证明它被盗了。
有什么办法可以做到这一点吗?我知道它存在于位图数据中,但是矢量数据呢?
PS:矢量图本身是相当随机的 - 它不能获得版权保护。
I have a some vector data that has been manually created, it is just a list of x,y values. The coordinate of the points is not perfectly accurate - it can be off by a few pixels and it won't make any perceivable difference.
So now I am looking for some way to watermark this data, so that if someone steal the vector data, I can prove that it's indeed been stolen. I'm looking for some method reliable enough that even if someone take my data and shift all the points by a some small amount, I can still prove that it's been stolen.
Is there any way to do that? I know it exists for bitmap data but how about vector data?
PS: the vector graphic itself is rather random - it cannot be copyrighted.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用这组点吗?例如,如果您正在处理 SVG,则可以使用某种类型的 XML 格式导出文件,即顶部的
注释、ID根据这样那样的模式生成,特别是您的额外属性,应用翻译的特定风格等。就像您可以从 JPEG 中找出可能用于创建它的内容一样,您可以告诉很多关于通过观察生成 SVG 文件的内容。
对于向量本身,您可以将它们视为有序序列,并应用由两个伪随机序列的值给出的偏移量,每个序列都从已知种子开始,用于 X 和 Y 平移,在一定范围内(例如[-1, 1])。即使某些点被修改,你也应该能够根据事物如何匹配序列来建立一个论点。如何准确地区分哪些内容发生了变化,也需要多加考虑;如果您只是简单地执行
int(x) + random(-1, 1)
,那么如果有人只是对所有值进行四舍五入,您的证据就会丢失。处理这个问题的一个更好的方法是,在仍然以相同的屏幕尺寸渲染的同时,将所有内容乘以某个常数,例如 953(任意接近 1000 的质数),然后通过该范围内的某个值调整您的值(即,[0 ,952])。这个以 953 为基数的系统会优于以 10 为基数的系统,因为它更难看到正在发生的情况。如果这个人改变了缩放比例,则需要对值进行更多分析,但这仍然是很有可能的。我有一种直觉,那就是选择一个素数可能会有点帮助,但我并没有考虑太多。如果在此类事情上遇到危险或有疑问,请选择一个质数……稍后您可能会发现它有好处!当然,结合多种不同的技术以获得最佳结果。
Is the set of points all you can work with? If, for example, you were dealing with SVG, you could export the file with a certain type of XML formatting, a
<!-- generated by thingummy -->
comment at the top, IDs generated according to such-and-such a pattern, extra attributes specifically yours, a particular style of applying translations, etc. Just like you can work out from a JPEG what is likely to have been used to create it, you can tell a lot about what produced an SVG file by observation.On the vectors themselves, you could do something like consider them as an ordered sequence and apply offsets given by the values of two pseudo-random sequences, each starting from a known seed, for X and Y translation, in a certain range (such as [-1, 1]). Even if some points are modified, you should be able to build up an argument from how things match the sequence. How to distinguish precisely what has been shifted could do with a bit more consideration, too; if you were simply doing
int(x) + random(-1, 1)
, then if someone just rounded all values your evidence would be lost. A better way of dealing with this would be to, while still rendering at the same screen size, multiply everything by some constant like 953 (an arbitrary near-1000 prime) and then adjust your values by something in that range (viz, [0, 952]). This base-953 system would be superior to a base-10 system because it's much (much much) harder to see what's happening. If the person changes the scaling, it would require a bit more analysis of values, but it should still be quite possible. I've got a gut feeling that that's where picking a prime number could be a bit helpful, but I haven't thought about it terribly much. If in danger or in doubt in such matters, pick a prime number for the sake of it... you may find out later there are benefits to it!Combine a number of different techniques for best results, of course.