昨天在修改了可以调试出来的错误之后,提取出的水印和嵌入的仍然相去甚远.这个时候我觉得有必要整理一下嵌入和提取的整个过程. 嵌入过程: Step1,嵌入的时候对网格的拉普拉斯矩阵L进行特征值分解,得到特征值和特征向量: Step2,将特征向量单位化: Step3,解方程:R . E = V(1),E,V已知求出R 其中R是频谱系数矩阵,E是单位化的特征向量矩阵,V是顶点坐标矩阵 Step4,修改R的R',其中R'= R + △ (2),R,△已知,求R' Step5,根据矩阵方程(1)求出V',…
调用matlab生成的网格水印特征向量矩阵 从文件中读取的原始网格的特征向量矩阵 好吧,之前得出的结果不正确是因为代码写错了.因为实现论文中的提取方案时代码写错了,自己想了另外一个方法,结果方向两者在本质上是一样的.…
接下来的问题是,当模型是对称的时候,结果是符合预期的,但是当模型是不对称的时候,结果是错误的,如下: 输入: 顶点:233 输出: 这又是什么鬼...,我的马呢!!! 看来逻辑上还是有错误 注意这时候C++输出的调试信息如下: 错误提示为:Input to EIG must not contain NaN,然后是一堆烫烫烫... 还有一个提示是: Matrix is close to singular or badly scaled. Results may be inaccurate. RCO…
在实现提取水印的过程中,遇到了一些问题 首先还是根据论文中的思路来梳理一下整个提取流程 读入两个模型,一个原始模型ori_mesh, 一个水印模型wm_mesh. 将两个模型对齐(即放在同一个坐标系下) 分别计算两个模型的频谱系数,记ori_mesh频谱系数为Rs, Rt, Ru, 记wm_mesh的频谱系数为wRs, wRt, wRu. 根据下式计算Qj 再根据下式计算出嵌入水印的符号,这里相当于得到的是嵌入的水印b',只是记为了aj 最后根据下式得出原始水印序列b 根据上述步骤,我一开始的想…
整理了一下要实现的论文Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain,步骤如下: 嵌入水印 à 提取水印 à 优化(网格细分) 嵌入水印的过程包括一下几个阶段 输入:原始网格 获取拉普拉斯矩阵K 对矩阵K做特征值分解 将原始网格中的顶点投影到特征向量的单位向量上,得到网格频谱系数 修改网格频谱系数 将频谱系数反变换得到顶点坐标 输出:水印网格 目前在嵌入水印阶段遇到了以下错误: 错误: 无法打开文件 "D:\code\Ge…
错误: error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD 这种错误不会直接定位到行,要自己慢慢看代码,找出不正确的访问. 原因:使用[]访问引起的错误,eigen中矩阵的访问不用用[] 解决方法:将[ ]改为( ) 修改错误之后,编译通过了,但运行时会中断. 调试时,遇到代码不会跳转的问题 当在调试模式下代码运行到eigenDef.calLapMatrix()时,…
首先说一下我的一些简单的调试方法,除了常规的断点调试之外,我还会使用注释的方法来调试.当整个工程代码量相当多且调用层次关系较为复杂时,这种方法能够比较高效的定位到出错误的代码段或某个函数,然后在出现错误的代码段中用断点调试,结合监视器就能逐步定位到具体的错误点了. 有时会遇到下列提示的错误 0xC0000005错误通常是由于内存访问错误引起,可能是你的程序有错误的指针操作或者访问了空对象 这个时候使用调试,慢慢查找到底哪个指针是空的,找到之后将指针初始化问题就可以解决了. 之前由于贪图方便,把s…
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date(); //返回当日的日期和时间. var year = today.getFullYear(); //获得当前的年份 var month = today.getMonth() + 1; //获得当前的月份 var day = today.getDate(); //获得当前的日期 var weekday…
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是32bit 的Tomcat不能在AMD 64-bit的platform 上面运行,但是经过查看我发现自己的tomcat和java都是64bit的. 查看tomcat的版本号的链接:→ http://jingyan.baidu.com/article/e73e26c0c4b40024adb6a789.…
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要采用分层架构,就拿最简单的三层架构来说吧,我们通常把业务逻辑写在DLL中,现在就来写一个例子,看看如何在不编译整个项目的情况下,轻松的实现扩展.先透露一下,我们只要添加一个DLL就可以了. 这里就以银行为例子吧,首先新建一个控制台项目,还叫MEFDemo吧,然后建一个类库写接口,然后再建一个类库实现…