Ho un'immagine in MATLAB:Come posso trovare i massimi locali in un'immagine in MATLAB?
y = rgb2gray(imread('some_image_file.jpg'));
e voglio fare un po 'di elaborazione su di esso:
pic = some_processing(y);
e trovare la massimi locali dell'uscita. Cioè, tutti i punti in che sono maggiori di tutti i loro vicini.
Non riesco a trovare una funzione MATLAB per farlo bene. Il meglio che posso venire in mente è:
[dim_y,dim_x]=size(pic);
enlarged_pic=[zeros(1,dim_x+2);
zeros(dim_y,1),pic,zeros(dim_y,1);
zeros(1,dim_x+2)];
% now build a 3D array
% each plane will be the enlarged picture
% moved up,down,left or right,
% to all the diagonals, or not at all
[en_dim_y,en_dim_x]=size(enlarged_pic);
three_d(:,:,1)=enlarged_pic;
three_d(:,:,2)=[enlarged_pic(2:end,:);zeros(1,en_dim_x)];
three_d(:,:,3)=[zeros(1,en_dim_x);enlarged_pic(1:end-1,:)];
three_d(:,:,4)=[zeros(en_dim_y,1),enlarged_pic(:,1:end-1)];
three_d(:,:,5)=[enlarged_pic(:,2:end),zeros(en_dim_y,1)];
three_d(:,:,6)=[pic,zeros(dim_y,2);zeros(2,en_dim_x)];
three_d(:,:,7)=[zeros(2,en_dim_x);pic,zeros(dim_y,2)];
three_d(:,:,8)=[zeros(dim_y,2),pic;zeros(2,en_dim_x)];
three_d(:,:,9)=[zeros(2,en_dim_x);zeros(dim_y,2),pic];
E poi vedere se compare la massima lungo la terza dimensione nel 1 ° strato (vale a dire: three_d(:,:,1)
):
(max_val, max_i) = max(three_d, 3);
result = find(max_i == 1);
c'è più elegante modo di fare questo? Questo mi sembra un po 'scomodo.
questione connessa: [Come posso trovare molti massimi locali in un'immagine disturbata?] (http://stackoverflow.com/questions/2706528/finding-many-local-max-in-an-image-using-matlab) –