maltab中对查找表函数makelut和applylut的理解


查找表(LUT)是预先计算出每个可能邻域形状的像素值,然后把这些值储存到一个向量中。

 

1、makelut

makelut函数可以提供给用户构造一个查找表。

lut = makelut(f, n)

其中f是函数句柄,n可以是2或3。对于2*2邻域总共有16种不同,对3*3邻域有512种变化。

以下我将举例说明:

例1、lut = makelut('sum(x(:)) == 4', 2);

跟踪makelut代码,知

if (n == 2)
    lut = zeros(16,1);
    for k = 1:16
        a = reshape(fliplr(dec2bin(k-1,4) == '1'), 2, 2);
        lut(k) = feval(fun, a, params{:});
    end

对于2*2邻域,总共有16种模版,对每一种模版求出他的模版矩阵a,再对矩阵a用fun(在此为'sum(x(:)) == 4')计算值,将计算得到的值作为lut的元素。

当k=4时,a=[1 0;1 0]。sun(a(:))=2,所以此时的lut(4)=0;

当k=16, a=[1 1;1 1]。 sun(a(:))=4,所以此时的lut(4)=1;

这样我们就能构造出一个查找表。

2、applylut

函数applylut使用查找表来处理二值图像.

跟踪知:

B = applylutc(A,lut);

 而applylutc是在applylutc.mexw32实现。

applylutc.c,函数applylutc的实现,代码参考http://code.google.com/p/mirone/source/browse/trunk/mex/applylutc.c?spec=svn1874&r=1874

函数入口为mexFunction,主要完成2*2或3*3模版像素值的计算,

对3*3模版个像素的权重为

1 8 64

2 16 128

4 32 256

再根据像素值找到对应的查找表,第1个元素对应编号为0的模板,第512个元素对应编号为511的模板。第i个元素值为1,表示可以去掉对应模板的中间的像素,将其像素值从1改为0。

 

参考资料

http://blogs.mathworks.com/steve/2008/05/13/lookup-tables-makelut-applylut/

http://blog.sina.com.cn/s/blog_a4034b2801018dmh.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章