在 x 值处沿 y 轴进行切片,这样您就有了很好的边界。然后使用“conv”找到该一维向量(包含 0 和 1)与奇数高斯函数的中心部分的卷积。这就像一个边缘滤波器,但对噪声具有鲁棒性。该卷积将为您提供一堆不规则间隔的峰。找到峰,数一数。每一个山峰都是两本书之间的分界线。(抱歉,如果没有白板,这个简单的过程很难解释。)
“奇数高斯函数的中心部分”= 想象一个正弦函数,在正/负 pi 处截断。但是从正到负的变化更接近阶跃函数。我认为你可以通过卷积高斯和阶跃函数得到你想要的。(再次,抱歉没有白板。)
edit2:这是一些 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 选择最适合您的数据的参数。