我在 matlab 中有一个图像,并对其执行了以下命令
样本.png
I=imread('sample.png');
sumCol=sum(I,2);
plot(sumCol);
现在基于 y 值阈值,例如 40,我需要为每个最大值获取局部最大值和两个最小值。在上面的图中,我提到了所需的红色矩形(最大值)和棕色矩形(最小值)。蓝色是原始图,黄色是我的手动平滑曲线。
我将如何平滑该图(否则会有太多最大值)并在matlab中找到那些最大值和最小值?
我在 matlab 中有一个图像,并对其执行了以下命令
样本.png
I=imread('sample.png');
sumCol=sum(I,2);
plot(sumCol);
现在基于 y 值阈值,例如 40,我需要为每个最大值获取局部最大值和两个最小值。在上面的图中,我提到了所需的红色矩形(最大值)和棕色矩形(最小值)。蓝色是原始图,黄色是我的手动平滑曲线。
我将如何平滑该图(否则会有太多最大值)并在matlab中找到那些最大值和最小值?
我建议对您的信号运行一个低通滤波器(与高斯或厢式车进行卷积),那么找到最大值和最小值会容易得多。
要找到局部最大值,请使用 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*')