我有一个 3D 二进制图像的输入和下面的首选输出:
输入:
首选输出:
如果只保留尖刺对象,我应该寻找哪些图像处理方法,就像上面的首选输出一样?
我有一个 3D 二进制图像的输入和下面的首选输出:
输入:
首选输出:
如果只保留尖刺对象,我应该寻找哪些图像处理方法,就像上面的首选输出一样?
“尖刺物体”的边界上有更多的角,因此一种方法是为此调整角检测器。
例如,我计算了距离变换图像的结构张量(下面的 Mathematica 代码)的行列式:
使用滞后进行二值化生成此图像,这应该是您选择的分割算法的良好起点:
Mathematica 代码(src
是您发布的源图像)
首先,我计算输入图像的距离变换。这会在整个对象区域(而不仅仅是边界)上产生对比,因此可以检测到整个对象。
dist = ImageData[DistanceTransform[src]];
接下来我准备结构张量的组件。高斯导数的滤波器大小如果为 5,则窗口大小为 20。
gx = GaussianFilter[dist, 5, {1, 0}];
gy = GaussianFilter[dist, 5, {0, 1}];
gx2 = GaussianFilter[gx^2, 20];
gxy = GaussianFilter[gx*gy, 20];
gy2 = GaussianFilter[gy^2, 20];
为了计算每个像素的角滤波器,我只需将它们插入结构张量的符号行列式中:
corners = Det[{{dx2, dxy}, {dxy, dy2}}] /. {dx2 -> gx2, dxy -> gxy, dy2 -> gy2};
这与以下内容基本相同:
corners = gx2 * gy2 - gxy * gxy;
将其转换为图像并将其缩放到 0..1 范围会产生上面的角检测器图像。
最后,用正确的阈值对其进行二值化,得到最终的二值图像:
MorphologicalBinarize[Image[corners], {0.025, 0.1}]