虽说用matlab一年多了,但是对于matlab的精髓感觉还是没有完全领会,始终在用C++的思想在编写matlab的程序。这样的方式导致了,matlab编写效率底,失去了很多对matlab特性的应用。
最近仔细研究了一篇CVPR中的一篇文章《Image Matching Using Local Symmetry
Features》,并且对论文所开放的代码进行了解析,目的是通过学习他人的代码,熟悉matlab如何编写这一类的程序。可以说收益非浅,在别人的代码中,很多细节地方的处理非常的巧妙,要是让我来写,肯定不会这样的简洁。打算写几篇笔记性的文章,把其中的一些matlab的设计技巧做一整理,我想这些资料在我将来做程序的时候是会经常用到,并且能事半功倍。
matlab滤波器模版的生成技巧。
如何通过一个给定大小 n 的模板来对一个权值分布函数进行采样,得到自己想要的滤波mask?
在C语言中,最常用的方法是对于i,j进行给定采样间隔循环对函数进行采样,最后得到mask。而matlab中可以使用meshgrid()函数生成采样网格,
linspace()函数直接生成x方向和y方向的采样向量。举例来说,要得到一个对函数
r = sqrt(x^2+y^2), sig = 1/12,
w = exp(-(r-0.75)^2)/(2*sig^2),
进行k_width x k_width 的模版采样后得到的mask。程序不用循环,可以这样:
>>[x,
y] = meshgrid(linspace(-1,1, k_width));
>>r =
sqrt(x.^2 + y.^2);
>>sig
= 1/12;
>>w =
exp(-(r - 0.75).^2/(2 * sig^2));
>>w =
w - min(w(:));
>>w =
w / sum(w(:));
可以看到程序设计非常的简单,只因对的函数对应在了对的位置。这就是matlab的魅力。