2017-08-24 31 views
0

我有一個稱爲「輸出」的單元陣列(2 x 6),第1行{1 - > 6,2}中的每個單元包含1024 x 1024 x 100矩陣。我想將movmedian應用到行#1中的每個單元格。我想在尺寸與窗口大小將此功能= 3 = 5在單元陣列中應用Movmedian

output = cellfun(@movmedian(5,3), output,'uniform', 0); 

這是我已經提出了到目前爲止的代碼,但是,它產生一個「unbalenced或意外的括號或支架」錯誤。我不確定是什麼導致了這個錯誤。我也有點不確定如何指示matlab僅在單元格數組的第1行上執行此操作,請幫助!

謝謝你的時間!

回答

2

作爲cellfun的第一個參數傳遞的function handle將依次通過每個單元(即每個3-D矩陣)的內容。既然你也需要路過movmedian需要額外的參數,你應該創建一個anonymous function像這樣:

@(m) movmedian(m, 5, 3) 

當輸入參數m是3 d矩陣。如果你想這適用於output第一行,你就必須index the cell array像這樣:

output(1, :) 

這將返回一個包含output第一行的單元陣列,與:表示「所有列」。如果您想將修改過的矩陣存回output的相同單元格中,您可以在分配中使用相同的索引。

全部放在一起,這裏的解決方案:

output(1, :) = cellfun(@(m) movmedian(m, 5, 3), output(1, :),... 
         'UniformOutput', false); 

...和一個小竅門,以避免指定'UniformOutput', false是封裝匿名函數的結果在單元陣列:

output(1, :) = cellfun(@(m) {movmedian(m, 5, 3)}, output(1, :)); 
+0

非常感謝你的解釋! 但是,應用這一點代碼後,單元格中的條目似乎沒有變化......我期待它們變爲1024 x 1024 x 19,但它們保持爲1024 x 1024 x 100。您怎麼看? – itend

+0

@itend:這是預期的。 'movmedian'使用*滑動*窗口,所以窗口會重疊,而不是將矩陣分成不同的塊。查看'movmedian'的[附加參數](https://www.mathworks.com/help/matlab/ref/movmedian.html#namevaluepairarguments),它可以給你一些選項來改變它的行爲。如果您有權訪問圖像處理工具箱,還可以查看[獨特的塊處理](https://www.mathworks.com/help/images/performing-distinct-block-operations.html)。 – gnovice

+0

啊,好的!我非常感謝澄清。 – itend