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

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