测量谷宽2d,matlab
我有一个2d图像,我有局部极小值出现的位置。 我想测量通向这些极小值的山谷的宽度。 我需要圆的半径或椭圆来拟合这些山谷。 这里附上一个例子,山峰轮廓上的深红色线条是我希望找到的。 谢谢测量谷宽2d,matlab,matlab,optimization,image-processing,Matlab,Optimization,Image Processing,我有一个2d图像,我有局部极小值出现的位置。 我想测量通向这些极小值的山谷的宽度。 我需要圆的半径或椭圆来拟合这些山谷。 这里附上一个例子,山峰轮廓上的深红色线条是我希望找到的。 谢谢 我建议列出一个描述椭圆边缘值的点列表,也许可以找到椭圆穿过阈值的所有点 above = data > threshold 应用一个简单的边缘检测器 edges = EdgeDetector(above) 求边的坐标 [row,col] = find(edges) 然后应用这个椭圆钳工我部分扩展了@Lu
我建议列出一个描述椭圆边缘值的点列表,也许可以找到椭圆穿过阈值的所有点
above = data > threshold
应用一个简单的边缘检测器
edges = EdgeDetector(above)
求边的坐标
[row,col] = find(edges)
然后应用这个椭圆钳工我部分扩展了@Lucas的答案
一个阈值<代码> t>代码>我会考虑下面的代码<代码> pYM<代码> >代码> t>代码>,并靠近你的<<代码> f>代码>的最小点>代码> m <代码>(给定特征刻度长度<代码> r>代码>) (你说你的数据是有噪声的;为了区分极小值和谈论井,你需要估计这样的
r
。在你的例子中,它可以是例如r=4
,即极小值之间距离的一半)
你必须考虑每个井区的度量<代码> pYM,比如说
metric(P_m) = .5 * mean{ maximum vertical diameter of P_m ,
maximum horizontal diameter of P_m}.
在您的图片中,两口井的公制(pum)=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); %
M:=f的局部极小值集
每个_(最小m,单位:m){
P_m+={P:d(P,m)我在这里假设您可以访问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
,了解上述操作的原因,以及您可以使用它的其他用途。您好,我对边不感兴趣,我对“边”感兴趣这是我的局部极小值的边界。我附加的meshc图像是一个简单的例子,事实上,我的数据中的谷值不是很明显,而且数据非常嘈杂,因此应用边缘检测器可能会合并其中的许多。椭圆装配工很酷。边缘检测器位仅用于将高于阈值和低于阈值的数据转换为边缘列表。将over=data>threshold
位替换为您想要检测的最小值内外的任何内容。我只提供了这三行代码作为如何使用包的粗略指南。好的,这r正是我没有的,我想通过测量我的最小值开始变化的区域来估计进化。我不想对它进行筛选,也不想估计我想测量的半径:-),r只是分离出极小值。希望井的特征半径小于r。否则所有井都会穿透自己。在你的照片中,井的半径约为2;而我的r约为4。如果你有这种尺度的区别,然后我建议的算法会起作用。如果不起作用,也就是说,井之间没有明确的区别,我会开始考虑一些类似频率的分析。Acrobe,你说的有道理!在我下一次评论之前,我需要想一想……)很好。让我们讨论一下!@matlabit