How to center data on the max value

6 次查看(过去 30 天)
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

采纳的回答

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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 2-D and 3-D Plots 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by