使用matlab删除图像中对象的背景

时间:2013-11-20 08:50:48

标签: image matlab image-processing computer-vision image-segmentation

我的图像有噪音。我想从图像中删除所有背景变化,并想要一个普通的图像。我的图像是一个视网膜图像,我只想要血管和视网膜环仍然如何做到这一点? 1张图片是我的原始图片,2张图片是我想要的图片。

这是我复杂的噪音图像 enter image description here

i want my image to be like this any idea how can i do it

4 个答案:

答案 0 :(得分:4)

视网膜图像中有多种血管提取方法。

您可以在Review of Blood Vessel Extraction Techniques and Algorithms中找到不同方法的全面概述。它涵盖了许多方面的突出作品。

正如马丁所说,我们有Frangi等人的基于Hessian的Multiscale Vessel Enhancement Filtering。已被证明适用于2D和3D的许多类似船只的结构。有一个Matlab实现,FrangiFilter2D,适用于2D血管图像。概述未提及Frangi,但涵盖了使用基于Hessian方法的其他工作。我仍然建议尝试Frangi的容器方法,因为它既强大又简单。

除了基于Hesisan的方法,我建议研究基于形态学的方法,因为Matlab为形态学操作提供了良好的基础。在An Automatic Hybrid Method for Retinal Blood Vessel Extraction中提出了一种这样的方法。它使用形态学方法与开帽/闭合以及礼帽变换。然后,它通过模糊聚类和一些后处理来补充形态学方法。我没有尝试重现他们的方法,但结果看起来很稳固,论文可以在网上免费获得。

答案 1 :(得分:3)

这是一项简单的任务。

检测血液的边界 - 尝试edge( I, 'canny' )并使用阈值参数来查看您可以获得的内容。
更高级的选项是使用this method for detecting faint curves in noisy images

一旦你有相当好的血液边缘,你可以使用分水岭/ NCuts或边界敏感版本的meanshift进行分割。

一些指示:
  - 血管似乎具有相对相同的厚度,就像文字笔触一样。您会考虑使用Stroke Width Transform (SWT)来识别它们吗?可以找到SWT的mex实现here   - 如果您有合理的边界,可以考虑this approach进行细分。

祝你好运。

答案 2 :(得分:2)

我认为使用基于电子管的过滤器可以提供更多服务。有一个过滤器,它基于一个名为Frangi的人所做的工作,过滤器通常被称为Frangi过滤器。这可以帮助您识别视网膜中的脉管系统。过滤器已经为Matlab编写,公共版本可用here。如果您想了解基础研究的搜索:'多尺度血管增强',Frangi(1998)。另一个在同一领域工作的团队是Sato et.al. 很抱歉在最后一个链接中没有链接,我只能找到付费网站查看此计算机上的研究论文。

希望这有帮助

答案 3 :(得分:1)

这是我要做的。基本上是传统的图像算法来提取背景,然后从输入图像中减去它。这将为您提供无背景的理想结果。以下是步骤:

  1. 使用大内核的中值滤波器作为第一步。这将估计背景。
  2. 将输入图像与步骤1的输出分开[您可能需要稍微移动分母(+1)]以避免除以0.
  3. 根据原始图像的位数将量化为8或n位整数。
  4. 上面步骤3的输出是背景。从原始图像中减去它,以获得所需的结果。这也会剪切所有负值。