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

时间:2016-04-07 18:53:05

标签: image matlab resize pixels

我想将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;

但我认为这是一个冗长的,输出也不是那么理想。任何人都可以建议我用更好的代码来执行此操作。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你拥有的代码实际上非常接近理想,除非你有很多硬编码值。那些应该真正计算在内。我们可以使用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), :);

<强>更新

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

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;