2013-02-28 102 views
0

我想使用3D blob檢測器,這是一種過濾算法,用於檢測圖像中的球形對象。在這種過濾器在其26附近值大於所有像素更大的體素被設置爲1查找3D圖像中的局部最大值

(s(x,y,z)=max(n26(x,y,z))) 

和每隔一個像素設置爲0。有沒有matlab中的任何功能來做這項工作?

M(x,y,z)={ 1 if s(x,y,z)=max(n26(x,y,z)) 
      0 otherwise 

回答

4

找到當地最大,最簡單的方法是使用imdilate

%# s = 3D array 
msk = true(3,3,3); 
msk(2,2,2) = false; 
%# assign, to every voxel, the maximum of its neighbors 
s_dil = imdilate(s,msk); 
M = s > s_dil; %# M is 1 wherever a voxel's value is greater than its neighbors 
1

matlabs自己imregionalmax支持26N從一開始走,輸出是符合邏輯的。

2D例如用8N:

A = 

    1  1  1  1  1  1  1  1 
    1  3  3  3  1  1  4  1 
    1  3  5  3  1  4  4  4 
    1  3  3  3  1  4  4  4 
    1  1  1  1  1  4  6  4 
    1  1  1  1  1  4  4  4 

>> B = imregionalmax(A); 
>> B 

B = 

    0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
    0  0  1  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  1  0 
    0  0  0  0  0  0  0  0