【问题标题】:Finding Minimum and Maximum points on Profile using MATLAB使用 MATLAB 在 Profile 上查找最小和最大点
【发布时间】:2013-02-06 16:05:14
【问题描述】:

我已经通过以下代码提取了容器横截面的轮廓

 imshow(image); % image is not shown
 [cx,cy,c,xi,yi] = improfile;

这里的 c 是沿剖面的强度,我使用以下方法绘制它们:

 x=1:length(c);
 figure
 plot(x,c,'o')
 axis([0 45 80 150])

它看起来像我上传的那个。 c 是 33X1 强度向量,其中 c=[123 126 131 138 139 141 143 143 144 141 136 126 102 96 91 100 100 113 109 96 94 90 101 107 116 123 127 130 131 13

我想检测 c 的索引以找到 A(左侧的最大值)、B(右侧的最大值)、C(左侧的最小值)、D(rt 侧的最小值)和 E(中间)点个人资料。

【问题讨论】:

    标签: matlab signal-processing


    【解决方案1】:

    在公共领域(http://www.billauer.co.il/peakdet.html)发布的函数peakdet 似乎第一次尝试就可以完成这项工作。您可以尝试使用函数的第二个参数来增加/减少选择性。

    c=[123 126 131 138 139 141 143 143 144 141 136 126 102 96 91 100 100 113 109 96 94 90 101 107 116 123 127 130 131 132 131 129 131];
    [ma mi]=peakdet(c,1);
    
    ma =
         9   144
        18   113
        30   132
    
    mi =
        15    91
        22    90
        32   129
    

    编辑:这个问题可能很有趣:How to differentiate between a double peak and a single peak array in MATLAB?

    【讨论】:

    • 感谢您的回复。它起作用了,但是对于 delta=2 就像您所做的那样,它会计算 3 个最小点(索引 32 处的额外最小值),这在我的情况下不是必需的,但是 delta =2 它给了我最大 3 个的答案。和 2 分钟。按要求。有什么办法可以自动调整阈值,因为我必须处理大约 100 个这种模式的数据,并且为每种调整 delta 非常耗时,而且不可能每次都手动调整。
    • 如果您知道所有数据集的外观/形状都相同,那么您可以尝试多次使用此函数,直到找到正确数量的局部极值。尽管这可能不是最优的,并且存在更适合您的特定数据集的其他算法,但这应该仍然有效。
    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多