最近在做一个算法,其实何恺明的Guided Image Filter,从作者给出的Matlab代码改成C而已。
刚开始做的时候,感觉是很简单的事情,我先读的论文,然后又看的Matlab代码。我只有本科学的那点C基础而已。在读懂论文和Matlab代码之后,我用了小半天时间做了算法流程图,第二天开始写代码,很轮廓的写,甚至指针和数据都没区分好的我也只能这样写,两天之后代码我写完了,本以为一个星期可以调通。但是在调试的过程中我遇到了各种各样的困难,写好代码之后我甚至不会单步调试。在语法问题上我大约就纠结了一个星期,在初始调试阶段我的目标是编译没错,期间我向师兄,师姐,还有我的导师请教过一些问题,在这个过程中我学会了如何使用指针,函数返回值类型等基本问题。
这样反复的调试,期间对我帮助最大的是我的师兄,我从他那学到了很多基本知识,周六的时候,虽然整个程序还运行不了,但是我的数据基本上都和Matlab中的数据对上了,周日的时候我帮这个算法调通了,但是增强后的图像和原图像基本没任何联系。一直到晚上十点左右我也没找到原因。周一,也就是昨天,我找到导师和导师说明我的进展情况,我的大致意思是余下的工作我不打算做了,我打算直接做到FPGA里。导师没有同意我的想法,而是让我继续,找出问题所在。昨天晚上我开始继续对照我的VC数据和Matlab数据,发现经过引导滤波后的图像有的数据时大于1的,这个问题当时就引起我的强烈关注。由于下午我们实验室出去聚餐,就暂时搁置了。今天早上,我开始全面调试,认真的和Matlab中的数据进行对照。中午我没有休息,最终找到了问题的所在,就是图像数据在我做局部算法的时候被我临时改变了,后来我又用到图像数据,这时候我的图像数据已经不是原来的图像的数据了,找到问题之后,我请教了导师,导师让我在用图像数据之前备份一下,结果我盖好之后,成功啦。
坚持到底,别放弃,别着急,静下心来才能做算法。