How to center data on the max value

3 views (last 30 days)
Ole
Ole on 28 Aug 2021
Commented: Ole on 28 Aug 2021
How to center 2D matrix (NxM) on the pixel with max value and fill rest with zeros?
The end result should be (NxM) with centered max.
x = -2:0.5:2;
y = 1:0.2:2;
[X,Y] = meshgrid(x,y);
Z = peaks(X,Y)
[row, col] = find(ismember(Z, max(Z(:))));
N = length(x);
M= length(y);
row = row(1);
col = col(1);
if row > N/2 && col > M/2
Z(1:(N/2-row),:) = [];
Z = [Z; zeros((N/2-row),M)];
Z(1:(M/2-row),:) = [];
Z = [Z; zeros((M/2-row),N)];
elseif row < N/2 && col < M/2
Z(:,end-(N/2-col):end) = [];
Z = [zeros(M,(N/2-col)) Z];
Z(:,end-(M/2-col):end) = [];
Z = [zeros(N,(M/2-col+1)) Z];
elseif row > N/2 && col < M/2
Z(1:(N/2-row),:) = [];
Z = [Z; zeros((N/2-row),M)];
Z(:,end-(M/2-col):end) = [];
Z = [zeros(N,(M/2-col+1)) Z];
elseif row < N/2 && col > M/2
Z(:,end-(N/2-col):end) = [];
Z = [zeros(M,(N/2-col)) Z];
Z(1:(M/2-row),:) = [];
Z = [Z; zeros((M/2-row),N)];
else
Z = Z;
end

Accepted Answer

Matt J
Matt J on 28 Aug 2021
Without the Image Processing toolbox? With the toolbox, you can simply use imtranslate().
  3 Comments
Matt J
Matt J on 28 Aug 2021
imtranslate does that by default. Example:
A=rand(100);
B=imtranslate(A,[30,40]);
montage({A,B},'Back','w','Bord',[2,10])

Sign in to comment.

More Answers (0)

Categories

Find more on Image Processing Toolbox in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!