KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have an image in MATLAB: y = rgb2gray(imread('some_image_file.jpg')); and I want to do some processing on it: pic = some_processing(y); and find the local maxima of the output. That is, all the points in y that are greater than all of their neighbors. I can't seem to find a MATLAB function to do that nicely. The best I can come up with is: [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]; And then see if the maximum along the 3rd dimension appears in the 1st layer (that is: three_d(:,:,1) ): (max_val, max_i) = max(three_d, 3); result = find(max_i == 1); Is there any more elegant way to do this? This seems like a bit of a kludge.
Tags (comma-separated)
Save Edits
Cancel