如何在Matlab中从照片中获得血管的长度?

w1jd8yoj  于 2023-03-19  发布在  Matlab
关注(0)|答案(1)|浏览(147)

我试图从下图中获得血管的长度(我对蓝色区域感兴趣):x1c 0d1x由于光照不均匀,我正在使用平场校正处理图像:I3 =非平场(I2,20);

我尝试使用kmeans的3个水平,并得到了一个相当不错的遮罩,但在 backbone 与bwskel或bwmorph我得到了一个非常混乱和复杂的网络的片段。

x 1c 3d 1xx 1c 4d 1x如何只得到血管的主要片段,而没有所有这些额外的小循环?也许我应该工作的遮罩,但没有bwmorph选项使我更接近我想要的结果。
我试着使用蒙版和一些bwmorph选项,如桥,填充,加厚,但它们并没有产生更好的 backbone 化。

mqkwyuun

mqkwyuun1#

这不是一个编程问题,但我至少给予你一些指导。你的问题是2D图像数据分析,这是一个非常复杂和广泛的领域-在这方面我有一些经验(足以告诉你,没有银,你的问题,这将是认真的努力,像几个月的工作)。

  • 眼前的实际问题还不清楚。2图像上有各种大小的血管,从大的到小的。3你必须决定什么是重要的,你要在哪里设置一个阈值。4这是一个研究问题,与编码无关。
  • 一个问题是你的输入图像的对比度是有限的,这也将限制任何结果
  • 你的方法是一个良好的开端,但我怀疑这是否足够。2我建议至少采取以下两到三个步骤:

1.减少“高频噪音”,集中在较大的/散装的特点。使用二维FFT向前+向后转换。有很好的例子,这你很容易找到。
1.专注于“边缘检测”。有优秀的和非常强大的边缘检测算法,你也很容易找到自己。
1.对于真实的应用,我最终会选择“基于拟合的方法”。我会从一个超级简单的几条直线模型开始,并执行数值回归/优化。这需要大量的微调,永远不会100%可靠,但在大多数情况下会给予完美的结果。实际上,我会选择一个超级鲁棒和简单的遗传算法求解器来完成这项任务。
最后,你需要的是认真的咨询,我们也可以讨论,或者监督+其他Maven的指导。但这不仅仅是堆栈溢出。

相关问题