在matlab中找到图像的局部最大值和最小值
finding local maxima and minima of the image in matlab
我在 matlab 中有一个图像,我对其执行了以下命令
sample.png
I=imread('sample.png');
sumCol=sum(I,2);
plot(sumCol);
现在基于 y 值阈值,例如 40,我需要为每个最大值获取局部最大值和两个最小值。
在上图中,我提到了所需的红色矩形(最大值)和棕色矩形(最小值)。
蓝色是原图,黄色是我手动平滑的曲线。
我如何平滑该图(否则会有太多最大值)并在 matlab 中找到那些最大值和最小值?
我建议 运行 对你的信号使用低通滤波器(与高斯或 box car 卷积),这样会更容易找到最大值和最小值。
要找到局部最大值,请使用 findPeaks(由 chessofnerd 建议)
要查找局部最小值,请使用 -1* 信号上的查找峰。
我建议您查看函数 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*')
我在 matlab 中有一个图像,我对其执行了以下命令
sample.png
I=imread('sample.png');
sumCol=sum(I,2);
plot(sumCol);
现在基于 y 值阈值,例如 40,我需要为每个最大值获取局部最大值和两个最小值。 在上图中,我提到了所需的红色矩形(最大值)和棕色矩形(最小值)。 蓝色是原图,黄色是我手动平滑的曲线。
我如何平滑该图(否则会有太多最大值)并在 matlab 中找到那些最大值和最小值?
我建议 运行 对你的信号使用低通滤波器(与高斯或 box car 卷积),这样会更容易找到最大值和最小值。
要找到局部最大值,请使用 findPeaks(由 chessofnerd 建议) 要查找局部最小值,请使用 -1* 信号上的查找峰。
我建议您查看函数 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*')