2014-10-20 141 views
1

我想要在图像img_gauss的每一列中找到这两个局部最大值之间的局部最大值和最小值。然后将它们的最小值设置为1(白色)。任何人都知道如何以简单的方式做到这一点?在每个列matlab中查找局部最大值和最小值

下面我有我的代码。但我遇到了一些麻烦,我尝试在每次迭代中(对于每列)采取本地化(locs),然后将它们放入数组peaks_column中,以按列来定位峰值,但是此错误消失:

下标分配尺寸不匹配。 cropping_image_long错误(第136行) peaks_column(1:size(Intens_graph,1),x)= pks(:,1);

pks= []; 
locs_column=zeros(20,size(img_gauss,2)); 
locs= []; 
pks_column=zeros(20,size(img_gauss,2)); 
for x = 1:size(img_gauss,2) % 2 = colunas x(colunas) 
    % make a row wise intensity distribution graphic for each column 
    Intens_graph(:,x)=img_gauss(size(img_gauss,1):-1:1,x); 
    [pks,locs] = findpeaks(Intens_graph(:,x));%find the local maximum 
    peaks_column(1:size(Intens_graph,1),x)=pks(:,1); %associate to each column 
    locs_column(1:size(Intens_graph,1),x)=locs(:,1); 

    BW = imregionalmin(Intens_graph); 

end 
+1

请你张贴一些样本数据。 – kkuilla 2014-10-20 15:01:50

回答

0

不完全确定你的意思是最低限度。在两个最大值之间总会有一个最小值。所以我会用findpeaks找到最低限度。

% test data 
data = rand(100); 

% for saving minima and maxima positions 
minimas = zeros(size(data)); 
for i = 1:size(data,2) 
    column = data(:,i); 
    [~,minis] = findpeaks(-column); 
    % save the positions 
    minimas(sub2ind(size(minimas),minis,repmat(i,length(minis),1))) = 1; 
end 
%generate result, paint all minimas with 1 
result = data; 
result(minimas==1) = 1;