在matlab中调整矩阵大小并保持相同的值
我有一个包含分段区域索引的二维矩阵在matlab中调整矩阵大小并保持相同的值,matlab,matrix,reshape,image-resizing,Matlab,Matrix,Reshape,Image Resizing,我有一个包含分段区域索引的二维矩阵[n,m]。我需要在不丢失原始值的情况下,在matlab中将矩阵重塑或调整为任意大小[n',m']。换句话说,我需要扩展分段区域。我尝试使用reshpae,但它不起作用,因为刻度的高度和宽度必须相似。imresize不起作用,因为它会更改原始值 我想出了一个快速的办法。串联矩阵是一种扩展矩阵大小而不影响现有数据的方法: s = zeros(3,3); for x = 1:3 % just adds numbers so it can be studied
[n,m]
。我需要在不丢失原始值的情况下,在matlab中将矩阵重塑或调整为任意大小[n',m']
。换句话说,我需要扩展分段区域。我尝试使用reshpae,但它不起作用,因为刻度的高度和宽度必须相似。imresize不起作用,因为它会更改原始值 我想出了一个快速的办法。串联矩阵是一种扩展矩阵大小而不影响现有数据的方法:
s = zeros(3,3);
for x = 1:3 % just adds numbers so it can be studied
s(:,x) = x;
end
t = [s, zeros(3,3)]; % adds a 3 by 3 matrix to the right
u = [s; zeros(3,3)]; % adds a 3 by 3 matrix below
v = [t; zeros(3,6)]; % adds a 3 by 6 matrix below t matrix
如果需要其他解决方案,请告诉我。它很简单,但我不明白您想要什么。我尝试在不使用循环的情况下解决它,如下所示:
function m1=reshapez(m,sz)
sa = sz(1) / size(m,1); % height scale between original matrix and desired one
sb = sz(2) / size(m,2); % width scale between original matrix and desired one
a2 = ceil([1:sz(1)]./sa); % corresponding indices (x) of the desired matrix in the original one
b2 = ceil([1:sz(2)]./sb); % corresponding indices (y) of the desired matrix in the original one
m1 = m(a2,b2); % desired matrix
你的意思是在现有矩阵中增加额外的行/列吗?我不明白你想要什么。你是不是在看零填充?在保持相同内容的同时扩展图像的边框?请更清楚地说明您的目标。您希望使用什么值填充扩展区域?假设您有10*10数据,并将其扩展到11*11,那么添加的21个值是什么?使用插值方法
imresize
。我认为您建议连接其他矩阵以达到所需的大小。实际上,我希望重塑矩阵并保持相同的值而不是相同的索引。使用imresize
和nearest
方法更容易。这将执行最近邻插值,这正是上面所做的。