尖峰选择的图像处理方法

信息处理 图像处理 计算机视觉 3d
2022-01-06 09:26:26

我有一个 3D 二进制图像的输入和下面的首选输出:

输入:

输入

首选输出:

输出

如果只保留尖刺对象,我应该寻找哪些图像处理方法,就像上面的首选输出一样?

1个回答

“尖刺物体”的边界上有更多的角,因此一种方法是为此调整角检测器

例如,我计算了距离变换图像的结构张量(下面的 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}]