2013-03-10 549 views
1

如何定義一個圓形濾波器,它的作用類似於中值濾波器(medfilt2),而不是[n n]的正方形鄰域,在半徑r的圓形鄰域上執行中值? 我需要在2D圖像上執行此操作。 (最好,當然應該快速工作)。 謝謝圓形中值濾波器matlab

回答

5

使用帶有圓形域的ordfilt2。例如,

B = ordfilt2(A, order, domain) 

將A中的每個元素替換爲由域中的非零元素指定的已排序相鄰集合中的第th元素。在你的情況下創造的東西,如

domain=fspecial('disk',10)>0; 

這會產生一個很好的二進制盤(21×21矩陣),這可能是太大了您的需求圓形域,因此可以重新大小,以任何你需要使用fspecialimresize。然後,中位數是從排序的非零元素獲得的中間值,因此:

B = ordfilt2(A,round(0.5*numel(find(domain)))),domain); 
+0

很酷!謝謝 ! – matlabit 2013-03-10 10:02:21