gpt4 book ai didi

matlab - 使用 MatLab 按不同强度分割对象

转载 作者:行者123 更新时间:2023-12-04 04:36:39 24 4
gpt4 key购买 nike

请查看下面的图片,以便更清楚地了解我要问什么。

enter image description here

我相信你们都能看到这张图片中的书籍数量,即 3 本书。我尝试根据它们的强度、分水岭对它们进行分割。由于噪音,即使使用 Canny 也没有真正成功。但总而言之,除了canny,图像总是看起来像这样(见左图):
enter image description here

所有书籍都聚集在一起的地方。我的目标是最终将它们分开并使用 bwboundaries 来计算书籍的数量。我还尝试使用 label2rgb 来进一步区分书籍,但是,所有发生的事情都是它只有一种颜色,这意味着 MatLab 将其视为所有 3 本书都相同。

我已经在精装书上取得了巨大的成功,但是由于这本书不是精装书,因此没有明确的界限将它们分开。

几天来我一直试图分割这张图片但没有成功。有什么想法吗?欢迎任何建议或想法。

最佳答案

沿 y 轴在 x 值处进行切片,这样您就有了很好的边界。然后使用“conv”找到该一维向量(包含 0 和 1)与奇数高斯函数的中心部分的卷积。这就像一个边缘过滤器,但对噪声具有鲁棒性。该卷积会给你一堆不规则间隔的峰值。找到峰值,并计算它们。每个峰都是两本书之间的边界。 (抱歉,如果没有白板,这个简单的过程很难解释。)

“奇数高斯函数的中心部分”= 想象一个正弦函数,在正/负 pi 处截止。但是从正到负的变化更接近于阶跃函数。我认为你可以通过对高斯函数和阶跃函数进行卷积来得到你想要的。 (再次抱歉,没有白板。)

编辑 2:这是一些 Matlab 代码,以交互方式运行,以便您了解我的意思:

x=[-9.5:1:9.5];
y=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1]; plot(x,y,'.');
g=exp(-x.*x/8); plot(x,g,'.');
odd_g=conv(y,g);plot([-19:19],odd_g,'.')

因此,odd_g(或类似的东西)是您想要与给定 x 处的图像切片进行卷积的东西。
peaks=conv(image_slice,odd_g);

编辑3:假设你有
image_slice=[1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1];

并注意我已经放入了一个嘈杂的边缘。对于选定的值,当您绘制卷积时,
plot(conv(image_slice,odd_g)

你会看到一个边缘的噪声有一个轻微的峰值,但它没有真正的边缘那么大。所以你会找到峰值并丢弃任何小于某个截止值的值。当然,为odd_g 选择最适合您的数据的参数。

关于matlab - 使用 MatLab 按不同强度分割对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com