查找 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&lt;-2,这表明水滴正在开始。

【讨论】:

如果水平镜像示例图像会怎样? @YvesDaoust 不知道这对这个解决方案有什么好处,您介意解释一下吗? 啊,我明白了,但就我而言,除了裁剪特定部分并将它们二值化之外,无需镜像或更改任何图像。但是是的,如果需要,代码需要进行一些调整。 @YvesDaoust 是的,至少对于每个测量系列(120 张图像)来说,液滴所在的电线是完全静止的。此外,相机始终固定在同一位置。上周我一直在分析很多图像,对我来说,它在 95% 的时间里都非常有效,而且用户输入非常低:)

以上是关于查找 BW 图像边界上的坐标的主要内容,如果未能解决你的问题,请参考以下文章

查找图像内的边缘(矩形的边界)

有一个用matlab实现对图像进行‘sobel’锐化和边界提取,不知道哪里出错,总是不对

深度学习和目标检测系列教程 4-300:目标检测入门之目标变量和损失函数

求助:MATLAB处理图像,已提取边缘,也得到了边缘的二值矩阵,提取坐标是用【m,n】 = find(BW==1)

matlab 提取图像轮廓(图像边缘提取)

如何在 Tensorflow 对象检测 API 中查找边界框坐标