matlab - 如何在此图像中找到边界表面
问题描述
我是图像处理的新手。我想找到将它们分开的黑白像素之间的表面。这是图片的链接。图像大小为 (21,900,900)
https://drive.google.com/file/d/1zUWK0Fb_n6f1JZou5mrUJq0x3h2X8mBK/view?usp=sharing
我尝试在一个图像平面中使用 MATLAB 的边界掩码命令,但我得到了噪音,而且它也仅适用于 2d 图像。请建议我如何在这里找到边界 3d 表面。谢谢你。这是应用边界掩码后的输出图像。
解决方案
你的第一步应该是摆脱你的噪音。由于您有某种椒盐噪声,您可以medfilt2()
在 matlab 中使用 2D 图像上的中值滤波器来实现。之后,您可以使用边缘检测器来查找边缘像素。代码可能如下所示。如果你想要表面,你需要在你的 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
对于这个简单的案例,我在这里使用的边缘检测器肯定是矫枉过正,但在短期内是我能想到的最简单的事情。如果性能相关,请告诉我,我会给你另一种方法。
推荐阅读
- spring - Spring Boot Server 有时只是不响应请求
- linux - 在一个 Makefile 中包含多个 .env 文件
- javascript - 如何使用 Javascript 将两个数据库字段组合成一个新字段?
- javascript - 一个 url 上的 Testcafe 测试脚本,然后是另一个 url,使用 setNativeDialogHandler/navigateTo 在测试之间不刷新
- github - 为什么不是所有语言都出现在 Github Repo 中?
- python - 为什么类属性只改变一次?
- javascript - 如何使用 jquery 向 DOM 添加反应组件?
- javascript - 需要在两个数组之间映射数据
- nearprotocol - 进行跨合约调用时超出预付 gas 错误
- python-3.x - 没有 Matplotlib 的 Python 中 x、y、z 点的 2D 图