在matlab中查找图像的局部最大值和最小值

时间:2016-08-28 00:19:22

标签: matlab image-processing maxima minima

我在matlab中有一个Image,我在其中执行了以下命令

sample.png

enter image description here

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

Sum Plot

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

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

1 个答案:

答案 0 :(得分:1)

我建议在你的信号上运行一个低通滤波器(使用高斯或盒式车进行处理)然后更容易找到最大值和最小值。

查找本地最大值使用findPeaks(由chessofnerd建议) 要找到局部mimima,请在-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*')
相关问题