我有一个 2d 图像,我有局部最小值出现的位置。我想测量“导致”这些最小值的山谷的宽度。我需要适合这些山谷的圆或椭圆的半径。附在这里的一个例子,山峰轮廓上的深红色线条是我希望找到的。谢谢。
问问题
871 次
3 回答
1
我建议制作一个点列表来描述椭圆边缘的值,也许是通过找到它跨越阈值的所有点。
above = data > threshold
应用一个简单的边缘检测器
edges = EdgeDetector(above)
找到边的坐标
[row,col] = find(edges)
然后应用这个椭圆拟合器http://www.mathworks.com/matlabcentral/fileexchange/3215-fitellipse
于 2012-10-27T18:48:48.757 回答
1
我正在部分扩展@Lucas 的答案。
给定一个阈值t
,我会考虑P_m
低于t
和接近某个m
最小值的点f
(给定一个特征尺度长度r
)。
(你说你的数据是嘈杂的;要区分最小值和谈论井,你需要估计这样r
的。在你的例子中,它可以是例如r=4
,即最小值之间距离的一半)。
然后你必须为每个井区 P_m
考虑一个指标,例如
metric(P_m) = .5 * mean{ maximum vertical diameter of P_m ,
maximum horizontal diameter of P_m}.
在你metric(P_m) = 2
的两个井的照片中。
总的来说,就伪代码而言,您可以考虑
M := set of local minima of f
for_each(minimum m in M){
P_m += {p : d(p,m) < r and f(r)<t} % say that += is the push operation in a Stack
}
radius_of_region_around(m) = metric(P_m); %
于 2012-10-27T19:22:21.650 回答
1
我在这里假设您可以访问x
,y
和z
数据,并且没有处理给定的 JPG(或左右)图像。然后,您可以使用该功能contourc
来发挥自己的优势:
% plot some example function
figure(1), clf, hold on
[x,y,z] = peaks;
surf(x,y,z+10,'edgecolor', 'none')
grid on, view(44,24)
% generate contour matrix. The last entry is a 2-element vector, the last
% element of which is to ensure the right algorithm gets called (so leave
% it untouched), and the first element is your threshold.
C = contourc(x(1,:), y(:,1), z, [-4 max(z(:))+1]);
% plot the selected points
plot(C(1,2:end), C(2,2:end), 'r.')
然后使用这个超快椭圆拟合工具通过这些点拟合一个椭圆,并找到你想要的椭圆的所有参数。
我建议您阅读help contourc
并doc contourc
找出上述内容的原因,以及您可以将其用于什么其他用途。
于 2012-10-28T10:22:49.883 回答