我想使用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
答案 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