0

我在 matlab 中有一个图像,并对其执行了以下命令

样本.png

在此处输入图像描述

I=imread('sample.png');
   sumCol=sum(I,2);
   plot(sumCol);

和图

现在基于 y 值阈值,例如 40,我需要为每个最大值获取局部最大值和两个最小值。在上面的图中,我提到了所需的红色矩形(最大值)和棕色矩形(最小值)。蓝色是原始图,黄色是我的手动平滑曲线。

我将如何平滑该图(否则会有太多最大值)并在matlab中找到那些最大值和最小值?

4

1 回答 1

2

我建议对您的信号运行一个低通滤波器(与高斯或厢式车进行卷积),那么找到最大值和最小值会容易得多。

要找到局部最大值,请使用 findPeaks(如 chessofnerd 建议的那样)要找到局部 mimima,请使用 find peaks on the -1*signal。

我建议您查看函数 findpeaks 并准确找到适合您的案例http://www.mathworks.com/help/signal/ref/findpeaks.html

% Create a random 1D signal
sig = randn(100,1);

% Create a gaussain window for low pass filtering
gaussFilter = gausswin(5);
gaussFilter = gaussFilter / sum(gaussFilter); % Normalize.

% Low pass filter the data
sigFilters = conv(gaussFilter,sig);

% Find max points (you should config this function for you own needs)
[maxPeaks,maxLocs] = findpeaks(sigFilters);

% Find min points 
[minPeaks,minLocs] = findpeaks(-1*sigFilters);

% Plot
plot(1:length(sigFilters),sigFilters,'b',maxLocs,maxPeaks,'b*',minLocs,-1*minPeaks,'r*')
于 2016-08-28T13:09:49.607 回答