2014-10-20 97 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;