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

 Akzeptierte Antwort

Matt J
Matt J am 28 Aug. 2021

1 Stimme

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

3 Kommentare

Ole
Ole am 28 Aug. 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 am 28 Aug. 2021
Thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2021a

Gefragt:

Ole
am 28 Aug. 2021

Kommentiert:

Ole
am 28 Aug. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by