Поиск локальных максимумов и минимумов изображения в matlab

У меня есть изображение в Matlab и к которому я сделал следующую команду

sample.png

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

Сумма Участок

Теперь, основываясь на пороговом значении y, например, 40, мне нужно получить локальные максимумы и два минимума для каждого из этих максимумов. В приведенном выше графике я упомянул обязательные красные прямоугольники (максимумы) и коричневые прямоугольники (минимы). Синий - это оригинальный сюжет, а желтый - моя сглаженная кривая.

Как бы мне сгладить этот сюжет (иначе было бы слишком много максимумов) и найти эти максимумы и минимы в matlab?

1 ответ

Решение

Я рекомендую использовать фильтр низких частот для вашего сигнала (конвульсия с гауссовским или коробочным автомобилем), тогда будет намного проще найти максимум и минимум.

Чтобы найти локальный максимум, используйте findPeaks (как предложено chessofnerd). Чтобы найти локальные минимумы, используйте find peaks по сигналу -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*')
Другие вопросы по тегам