我想使用 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
我想使用 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
找到局部最大值的最简单方法是使用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
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