史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

各向同性扩张利用距离变换

布雷特最近问我关于一个图像处理的问题。一步的问题涉及到一定距离内找出哪些像素的前景在一个二进制图像。我们尝试了一些方法,我想与你分享结果。特别是,我想向你们展示一个有用的技术各向同性的扩张这可以通过使用距离变换。

让我们先从一个小400 -,- 400测试图像只有一个前景像素的中心。

bw = false (400、400);bw (200、200) = 1;imshow (bw)

假设我们想知道哪个前景像素的像素是在25单位?一个常见的技巧是与一个磁盘进行扩张。

se = strel (“磁盘”25);bw2 = imdilate (bw, se);

不过,这有一个问题。如果你读的文档strel小心,你会发现在默认情况下是一个计算一个结构化元素近似一个磁盘。你可以看到的影响近似通过观察膨胀的输出:

imshow (bw2)

你可以避免近似通过传入0作为第三输入参数strel:

se2 = strel (“磁盘”,25岁,0);bw3 = imdilate (bw, se2);imshow (bw3)

那么为什么strel使用磁盘默认近似?因为它通常更快。让我们看看在更大的测试图像(750 - 1500)的像素在前台。

url =“https://blogs.mathworks.com/images/steve/2010/binary_benchmark.png”;bw2 = imread (url);imshow (bw2“InitialMagnification”,25)
f = @ () imdilate (bw2 se) time_with_approximate_disk时间= (f)
f = @ () imdilate (bw2 se) time_with_approximate_disk = 0.0292
g = @ () imdilate (bw2 se2) time_with_exact_disk时间= (g)
g = @ () imdilate (bw2 se2) time_with_exact_disk = 1.4536

另一个使用imdilate是使用bwdist计算距离变换然后阈值结果。距离变换计算为每个像素,像素之间的距离,最近的前景像素。是如何工作的呢?

bw4 = bwdist (bw) < = 25;imshow (bw4)

这个函数bwdist使用一个快速算法,所以这将快得多imdilate用一个精确的磁盘。

h = @ () bwdist (bw2) < = 25;time_using_distance_transform =时间(小时)
time_using_distance_transform = 0.0687

这种方法有时被称为距离阈值的变换各向同性的扩张

你创造性的利用距离变换的在你的工作吗?然后在这里发布评论。




使用MATLAB®7.10发表

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。