如何使用 matlab 添加额外像素来调整图像大小

How to resize an image by adding extra pixels using matlab

我想将 512X512 图像调整为 363X762 图像,这将比原始图像(尺寸为 512X512)大。这些额外的像素值必须是 0-255 范围内的不同值。 我尝试了以下代码:

I=imread('photo.jpg'); %photo.jpg is a 512X512 image
B=zeros(363,726);
sizeOfMatrixB=size(B);
display(sizeOfMatrixB);
B(1:262144)=I(1:262144);
imshow(B);
B(262155:263538)=0;

但我认为这是一篇冗长的文章,而且输出也不尽如人意。谁能建议我使用更好的代码来执行此操作。提前谢谢你。

我认为您拥有的代码实际上非常接近理想,只是其中有很多硬编码值。这些应该是实时计算的。我们可以使用 numel 来计算 B.

中的元素数量
B = zeros(363, 726);

%// Assign the first 262144 elements of B to the values in I
%// all of the rest will remain as 0
B(1:numel(I)) = I;

这种灵活性很重要,实际上通过您最后一行中的错字证明了重要性:

B(262155:263538)=0;

%// Should be
B(262144:263538)=0;

此外,您不需要在最后将这些额外赋值归零,因为您首先将矩阵初始化为全零。

旁注

您似乎将每列的原始图像数据分散到多个列中。我猜这不是你想要的。您可能只想获取 I 前 363 行以放入 B。您可以这样做:

B = zeros(363, 726);
B(1:size(B, 1), 1:size(I, 2)) = I(1:size(B, 1), :);

更新

如果您希望其他值是 other 而不是零,您可以将矩阵初始化为 那个值

value = 2;
B = zeros(363, 726) + value;
B(1:numel(I)) = I;

如果您希望它们是 0 到 255 之间的随机整数,请使用 randi 初始化矩阵。

B = randi([0 255], 363, 726);
B(1:numel(I)) = I;