2016-10-31 116 views
2

有沒有人有定義輸入函數作爲MATLAB中的qtdecomp函數的閾值標準的經驗?我嘗試以下,但它沒有工作:MATLAB中的四叉樹分解:qtdecomp函數輸入

MyFunc = @(A,threshold) std2(A)>threshold; 
S = qtdecomp(Image,MyFunc,threshold); 

不知何故,一些臨界值,只有四叉樹的最左邊的四分之一分爲新件。這可能是qtdecomp代碼本身的錯誤,或者我的函數輸入有問題嗎?

有關詳細信息,請參閱附加圖像。我得到這個依賴於閾值的我選擇:

enter image description here

+0

我們真的需要看到一個示例圖像。這可能是一些圖像的預期行爲。您是否嘗試過沒有自定義函數的'qtdecomp'? – beaker

回答

2

的問題是圖像傳遞到您的匿名函數作爲代表分解成k塊圖像的m x m x k陣列。該函數必須返回一個長度爲k的向量,但std2僅查看第一個塊並返回一個標量。我還在試圖想出一個量化的方法來此,但現在這裏是一個獨立功能的簡單循環:

function v = Std2Func(A, threshold) 
    s = size(A,3); 
    v = zeros(1,s); 

    for k = 1:s 
     v(k) = std2(A(:,:,k))>threshold; 
    end 
end 

這遍歷輸入數組的k飛機,應用std2每個2D並將結果放入輸出向量中。然後您只需撥打qtdecomp即可使用新功能的句柄:

S = qtdecomp(Image,@Std2Func,threshold);