查找 BW 图像边界上的坐标
Posted
技术标签:
【中文标题】查找 BW 图像边界上的坐标【英文标题】:Find coordinate on boundary of BW image 【发布时间】:2021-12-26 18:53:53 【问题描述】:我需要在 MATLAB 中的图像上找到一个特定点,我需要测量的对象在此“开始”。这是一个水滴在表面上的图像,我想知道如何找到水滴开始的 x 坐标。
我有一个此类图像的大型数据集,并且每个图像的液滴开始的坐标都不同。
所以我的问题是,有没有办法在 MATLAB 中找到这个“起点”的坐标?
【问题讨论】:
您能告诉我们图片中的“起点”是什么吗?第一列有黑色像素?如果是这样的话,你有没有考虑过找到那个? @Ander Biguri 是的,当然对不起!起点是指液滴开始的位置,因此您首先看到的是玻璃的白线。然后当你沿着这条线走时,白线开始上升的地方。这就是我需要的点,这就是液滴的第一个像素开始的地方。所以边界开始上升的第一列。 @YvesDaoust 感谢您的快速回复!我也想过这个,但我不知道怎么做。您能否给我一个提示或向我展示如何执行此操作的示例? 抓取每列最低的黑点,让你突然有了一个函数,而不是一个图像。计算数值导数(例如使用diff
)。如果变大,则意味着液滴开始。此方法的成功将取决于您的其他图像的外观。这就是为什么你最好这样做,因为这个图像的解决方案可能不适用于其他图像,这里的目标是你学习如何去做,而不是让我们提供解决方案。如果您无法使其工作,请使用您尝试过的内容更新您的帖子。
@YvesDaoust 同意,这只是一个可能有效的“快速”解决方案
【参考方案1】:
我设法做到了。这可能不是最好的方法,但它似乎有效!
% Check X coordinate of start droplet
[B] = bwboundaries(FBW, 'noholes');
for k = 1:length(B)
boundary = Bk;
for l = 70:length(boundary)
dY(l) = (boundary(l,1) - boundary((l-15),1));
startDropletH = find([dY(:)] < -2, 1, "first")-5;
end
end
它首先存储边界上的所有点,然后计算并存储超过15个X点的dY
,并从这些点第一次查找dY<-2
,这表明水滴正在开始。
【讨论】:
如果水平镜像示例图像会怎样? @YvesDaoust 不知道这对这个解决方案有什么好处,您介意解释一下吗? 啊,我明白了,但就我而言,除了裁剪特定部分并将它们二值化之外,无需镜像或更改任何图像。但是是的,如果需要,代码需要进行一些调整。 @YvesDaoust 是的,至少对于每个测量系列(120 张图像)来说,液滴所在的电线是完全静止的。此外,相机始终固定在同一位置。上周我一直在分析很多图像,对我来说,它在 95% 的时间里都非常有效,而且用户输入非常低:)以上是关于查找 BW 图像边界上的坐标的主要内容,如果未能解决你的问题,请参考以下文章
有一个用matlab实现对图像进行‘sobel’锐化和边界提取,不知道哪里出错,总是不对
深度学习和目标检测系列教程 4-300:目标检测入门之目标变量和损失函数