Danielsson功能

3 matlab image-processing octave image-segmentation

我正在实现一个图像分割算法,在某些时候我需要实现一个名为"Danielsson Function"的函数,它将二进制图像转换为灰度距离图,其中每个粒子像素被赋予一个等于其最短欧几里得的灰度值.距粒子边界的距离'.
我不是图像处理专家,我能想象的唯一方法就是为每个像素使用BFS算法,但这需要很长时间.
我在网上找不到太多,所以我想知道有没有任何优化的方法来实现这个或者是否有任何Matlab/Octave函数可以做这样的事情?

Dan*_*l.V 5

你可以通过使用"bwdist"matlab函数来做到这一点,正如所提到的注释
,如果你需要的话,这里是帮助的链接: 二进制图像的距离变换 - MATLAB bwdist
这里是代码:

I=uint8(bwdist(some_binary_image))
Run Code Online (Sandbox Code Playgroud)

请务必使用'uint8',因为'bwdist'仅为您提供具有双数值的距离矩阵.

  • 这真的是非常糟糕的建议!不要使用`uint8`,1)它会截断超过255的距离(很可能发生); 2)你将失去精确度,无法区分2.5和3.4之间的距离!这是指定欧几里德距离的原因. (2认同)