How to center data on the max value

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

 Risposta accettata

Matt J
Matt J il 28 Ago 2021

1 voto

Without the Image Processing toolbox? With the toolbox, you can simply use imtranslate().

3 Commenti

Ole
Ole il 28 Ago 2021
Thank you. With the toolbox is ok. Is there an easy way to fill with zeros the missing data ?
imtranslate does that by default. Example:
A=rand(100);
B=imtranslate(A,[30,40]);
montage({A,B},'Back','w','Bord',[2,10])
Ole
Ole il 28 Ago 2021
Thank you!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Images in Centro assistenza e File Exchange

Prodotti

Release

R2021a

Richiesto:

Ole
il 28 Ago 2021

Commentato:

Ole
il 28 Ago 2021

Community Treasure Hunt

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

Start Hunting!

Translated by