尖刺选择的图像处理方法


11

我有一个输入作为3D二进制图像,下面是首选输出:

输入:

输入

首选输出:

输出值

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


3D二进制图像是什么意思?您可以轻松地将图像分割成各个部分吗?
bjoernz'3

对于3D,我的意思是这是断层图像。
2012年

1
你能解释什么是spiky对象吗?真正叫它尖刻的是什么?识别尖刺物体的主要特征是什么?
Dipan Mehta 2012年

在这种情况下,一个尖锐的对象是一个3D区域,该区域不平滑,并且在其整个上方都具有这些刺状的形状。
2012年

Answers:


19

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

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

很酷的答案!=)
声子2012年

您的答案是惊人的,我从中学到了很多。
安德烈·鲁布施泰因
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.