图像处理问题解决师——求取每个颗粒到其他颗粒边缘的最近距离

问题描述

需要解决的图像

需要解决的图像
此图像处理实际问题来自工程中遇到的实际问题,针对上图中所示颗粒图片,需要求解取每个颗粒到其他颗粒边缘的最近距离。并用Matlab画线工具将最短距离可视化出来。

解决思路

图片读入并去掉小噪声 bwareaopen()

通过Matlab联通域函数bwareaopen()去除图像中小噪声颗粒的影响
matlab函数bwareaopen──删除小面积对象
格式:BW2 = bwareaopen(BW,P,conn)
作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。

计算连通域边缘点 bwboundaries()

通过Matlab联通域函数bwareaopen()去除图像中小噪声颗粒的影响
格式:[B,L] = bwboundaries(BW,‘noholes’);
作用:获取二值图中连通域的轮廓。B是一个P×1的cell数组,P为连通域个数,每个cell是Q×2的矩阵,Q为对应连通域的边缘点个数,Q行对应于连通域轮廓的像素坐标。L是与原图大小一致的标签矩阵,存储着连通域的标签。

去除小噪声以及边缘像素检测之后的图像

去除小噪声以及边缘像素检测之后的图像
现在需要解决的问题:针对每一个颗粒,如何得到其他颗粒边缘到该颗粒边缘的最短距离。

双层for循环求解

第一层循环首先遍历[B,L] = bwboundaries(BW,‘noholes’)得到的P个颗粒连通域,第二层for循环遍历每个颗粒的Q×2cell,即每个颗粒的边缘点。
对于最内层循环,即每个颗粒的边缘点,遍历图像以寻找离该边缘点最近的其他颗粒边缘点,并不断更新最小距离。该处有一个优化操作是在遍历图像时并不需要遍历整张图像,而仅仅需要遍历当前颗粒附近取余的图像即可,这样可以大大提升效率,避免无用功。

针对图中蓝色颗粒,最内层遍历仅需要在绿色范围内进行遍历即可

比如针对上图中蓝色颗粒,最内层遍历仅需要在绿色范围内进行遍历即可

最近边缘可视化

最后将计算结果通过Matlab中plot()函数可视化

最后效果

测试图test1.bmp:蓝色连接线即为每个颗粒到其他颗粒边缘的最近距离

测试图test1.bmp:蓝色连接线即为每个颗粒到其他颗粒边缘的最近距离

测试图test3.bmp:蓝色连接线即为每个颗粒到其他颗粒边缘的最近距离

测试图test3.bmp:蓝色连接线即为每个颗粒到其他颗粒边缘的最近距离

Matlab代码链接

Matlab代码及测试图像

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ACE_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值