Поиск локальных максимумов и минимумов изображения в 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*')