C++实现网格水印之调试笔记(二)
整理了一下要实现的论文Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain,步骤如下:
嵌入水印 à 提取水印 à 优化(网格细分)
嵌入水印的过程包括一下几个阶段
输入:原始网格
获取拉普拉斯矩阵K
对矩阵K做特征值分解
将原始网格中的顶点投影到特征向量的单位向量上,得到网格频谱系数
修改网格频谱系数
将频谱系数反变换得到顶点坐标
输出:水印网格
目前在嵌入水印阶段遇到了以下错误:
错误:
无法打开文件
"D:\code\GeometryProcessing-1\Debug\GeometryProcess.lib"
解决:这个问题一般是由其他问题所引起的,查看错误列表,从上往下逐个解决错误,这个错误自然就消失了。
打开解决方案时,提示如下语句
!!! Qt4 Add-in was found and closed! !!!
Qt4 and Qt5 versions can't be used at the same time.
Add-in Manager from Tools menu can be used to close Qt5 Add-in and to restart Qt4 Add-in.
解决参考:http://qiusuoge.com/11742.html
以下两个操作是取顶点坐标和将修改后的坐标放入原始的顶点坐标中。


注意,当将修改后的顶点坐标赋回给网格上的顶点时,要使用引用类型

也可以将顶点信息放入一个double数组,然后用指针指向该数组,一遍传入matlab

注意,因为使用了auto类型,所以指针和整数的int j要定义在for循环外面,
下面来看下实验结果
输入: 输出:


什么鬼,肯定是代码写错了,泪
输出前10个点分别看看修改前后的值

从上面的结果看到点的坐标改动太大了,应该是逻辑出现了错误

修改之后仍然错误。。。
之后我开始怀疑是特征值分解的时候出错了
然后我换了其他几个模型,得到的结果如图



 

以斜杠为分界,左边是原始网格中的点,右边是水印网格中的点
从这个正24面体的顶点改动情况来看,应也是符合预期的,顶点的轻微改动肉眼不宜察觉。



当输入的模型是一个球是,变换明显是错误的。。。
而当我把模型换成马时,程序中断了
使用之前记录的buffer的调试方法,发现是矩阵特征值分解出错了,错误提示如下:


这应该是对于一个非对称的模型,其特征值可能有复数造成的。





如果特征向量之间正交,那么单位化后也是正交的,则在求Rs1时,直接在下式两端乘以e1即可。

拉普拉斯矩阵的特征值分解后得到的特征向量不一定是正交的,因此得到的结果是错误的。
C++实现网格水印之调试笔记(二)的更多相关文章
- C++实现网格水印之调试笔记(六)—— 提取完成
		
昨天在修改了可以调试出来的错误之后,提取出的水印和嵌入的仍然相去甚远.这个时候我觉得有必要整理一下嵌入和提取的整个过程. 嵌入过程: Step1,嵌入的时候对网格的拉普拉斯矩阵L进行特征值分解,得到特 ...
 - C++实现网格水印之调试笔记(六)——补充
		
调用matlab生成的网格水印特征向量矩阵 从文件中读取的原始网格的特征向量矩阵 好吧,之前得出的结果不正确是因为代码写错了.因为实现论文中的提取方案时代码写错了,自己想了另外一个方法,结果方向两者在 ...
 - C++实现网格水印之调试笔记(五)—— 提取出错
		
在实现提取水印的过程中,遇到了一些问题 首先还是根据论文中的思路来梳理一下整个提取流程 读入两个模型,一个原始模型ori_mesh, 一个水印模型wm_mesh. 将两个模型对齐(即放在同一个坐标系下 ...
 - C++实现网格水印之调试笔记(四)—— 完成嵌入
		
接下来的问题是,当模型是对称的时候,结果是符合预期的,但是当模型是不对称的时候,结果是错误的,如下: 输入: 顶点:233 输出: 这又是什么鬼...,我的马呢!!! 看来逻辑上还是有错误 注意这时候 ...
 - C++实现网格水印之调试笔记(三)—— 初有结果
		
错误: error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD 这种错误 ...
 - C++实现网格水印之调试笔记(一)
		
首先说一下我的一些简单的调试方法,除了常规的断点调试之外,我还会使用注释的方法来调试.当整个工程代码量相当多且调用层次关系较为复杂时,这种方法能够比较高效的定位到出错误的代码段或某个函数,然后在出现错 ...
 - Tomcat调试笔记
		
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...
 - JavaScript特效(调试笔记)
		
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
 - webpy使用笔记(二) session/sessionid的使用
		
webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
 
随机推荐
- ASP.Net WebForm学习笔记:一、aspx与服务器控件探秘
			
作者:周旭龙 出处:http://edisonchou.cnblogs.com 开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便 ...
 - 表连接到底咋回事,就是产生中间结果啊!用于给select/insert等操作用
			
1.表连接到底咋回事,就是产生中间结果啊!用于给select/insert等操作用啊. 2.表连接产生的结果用于select/insert用 3.表连接产生的结果用于select/insert用 比如 ...
 - 汇编debug 截图3
 - VIM树状文件列表NERDTree
			
下载和配置 NERDTree插件的官方地址如下,可以从这里获取最新的版本 https://github.com/scrooloose/nerdtree 下载zip安装包 或者使用下面官网源文件安装方法 ...
 - laravel加载javascript库
			
一篇文章: Generating a Link to a Javascript File Problem You want your Blade template to load an externa ...
 - openfire的smack和asmack
			
smack你可以看成是一套封装好了的用于实现XMPP协议传输的API,它是一个非常简单并且功能强大的类库,给用户发送消息只需要三行代码.下载地址:http://www.igniterealtime.o ...
 - php程序员应具有的7种能力
			
php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助. 一,php能力 1,了 ...
 - C# 计时器的三种使用方法
			
在.net中有三种计时器,一是System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet;二是System.Timers命名空间下的Timer类. Timer控件 ...
 - hdu 3501 Calculation 2 (欧拉函数)
			
题目 题意:求小于n并且 和n不互质的数的总和. 思路:求小于n并且与n互质的数的和为:n*phi[n]/2 . 若a和n互质,n-a必定也和n互质(a<n).也就是说num必定为偶数.其中互质 ...
 - poj3307
			
可以证明,每个符合的数都由2,3,5,7相乘得到. 依据猜想:下一个出现的数是由前面某个数乘上这几个数之一得到的新的数. 假设之前的数均满足序列,则因为下一个数必有2,3,5,7相乘得到,而这个数之前 ...