【问题标题】:How can I find the boundary surface in this image如何在此图像中找到边界表面
【发布时间】:2023-03-09 17:35:01
【问题描述】:

我是图像处理的新手。我想找到将它们分开的黑白像素之间的表面。这是图片的链接。 图像大小为 (21,900,900)

https://drive.google.com/file/d/1zUWK0Fb_n6f1JZou5mrUJq0x3h2X8mBK/view?usp=sharing

我尝试在一个图像平面中使用 MATLAB 的边界掩码命令,但我得到了噪音,而且它仅适用于 2d 图像。请建议我如何在这里找到边界 3d 表面。谢谢你。 这是应用边界掩码后的输出图像。

【问题讨论】:

  • 在以类似于 Max 建议的方式去除噪声后(尽管我会使用 3D 中值滤波器),使用 3x3x3 内核应用侵蚀。图像和侵蚀图像之间的区别在于您要寻找的表面。

标签: matlab image-processing


【解决方案1】:

您的第一步应该是摆脱噪音。由于您得到了某种椒盐噪声,您可以在 matlab 中使用medfilt2() 对二维图像使用中值滤波器来实现这一点。之后,您可以使用边缘检测器来查找边缘像素。代码可能如下所示。如果你想要表面,你需要在你的 3D 图像的第三维上循环这个。代码将如下所示:

for ii=1:16
    I=imread('image.tif',ii);
    I_bs=boundarymask(I);
    I_filt=medfilt2(I_bs,[7 7]);
    boundarysurface(:,:,ii)=edge(I_filt,'Canny');
end

我在这里使用的边缘检测器对于这个简单的案例来说肯定是矫枉过正,但这是我短期内能想到的最简单的东西。如果性能相关,请告诉我,我会给你另一种方法。

【讨论】:

  • 我认为你误解了一些东西。我的输入图像是 3d 附加在谷歌驱动器链接中。显示的图片是应用边界掩码后的输出图像。 2d 中的边成为 3d 中的曲面。感谢您的回答。我将尝试使用中值过滤器进行预处理。
  • 好吧,在那种情况下,我真的不明白你的问题。你想要一个边界面,你得到了一个边界面。如果您想消除表面的噪音,请使用我建议的 medfilt2。你还需要什么?
  • @user3704712 好的,我想我现在得到了你想要的。这是图像第一维的 21 个单层之一的边界掩模图像,并且您想要沿着图像的所有 21 个层的表面,对吗?如果是这样,我可以稍后更改我的答案以适应该需求
  • 是的,你是对的。我想要图像的所有 21 个级别的表面。抱歉回复晚了。
  • @user3704712 对不起,我有点忘了这件事。但我调整了我的答案。现在就去看看它是否符合您的需要。
猜你喜欢
  • 2015-11-21
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多