0

我想使用 3D blob 检测器,它是一种过滤算法,用于检测图像中的球形物体。在此过滤器中,值大于其 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
4

2 回答 2

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
于 2013-03-01T00:49:49.983 回答
1

matlabs自己imregionalmax从一开始就支持26n,输出是合乎逻辑的。

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
于 2014-03-06T08:23:54.673 回答