在3D图像中找到局部最大值

时间:2013-02-28 19:37:46

标签: matlab 3d processing

我想使用3D斑点检测器,它是一种过滤算法,用于检测图像中的球形物体。在该滤波器中,其值大于其26邻域中的所有像素的体素被设置为1

(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

2 个答案:

答案 0 :(得分: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 :(得分:1)

matlabs拥有imregionalmax支持26n来自get,输出是合乎逻辑的。

带有8n的2D示例:

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