【问题标题】:finding local maxima and minima of the image in matlab在matlab中找到图像的局部最大值和最小值
【发布时间】:2017-01-04 08:16:11
【问题描述】:

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

sample.png

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

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

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

【问题讨论】:

  • 在登山中查找“突出”的概念。这听起来无关紧要,但实际上很有用。你会拿前三个最突出的点。 (但是,对于您正在做的事情,您可能只能获取前三个局部峰值,请参阅findpeaks 命令)。我有一个脚本可以计算显着性,但现在无法访问它,但如果你想要它可能会挖掘它。
  • 此外,样条线可能会帮助您自动化平滑过程。
  • 请把它挖出来。

标签: matlab image-processing maxima minima


【解决方案1】:

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

要找到局部最大值,请使用 findPeaks(由 chessofnerd 建议) 要找到局部 mimima,请使用 find -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*')

【讨论】:

  • 你能用matlab详细说明一下吗?
  • 它没有显示第一个峰的开始最小值和最后一个峰的结束最小值。关于这个也有任何想法吗?............方式。
  • 就像我在回答中所说,您需要查看 findpeaks 函数的参数,有很多方法可以配置它,也许您需要使用其中的一个选项。
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 2016-03-16
  • 2023-01-05
  • 2014-07-03
  • 2010-12-23
  • 2019-04-17
  • 2012-12-28
  • 2018-06-09
相关资源
最近更新 更多